rau*_*ves 4 java collections list
最初,我有这个代码:
String[] A;
String[] B;
//...
List<String> myList= new ArrayList<>(A.length + B.length);
for (int i= 0; i< B.length; i++){
myList.add(A[i]);
myList.add("*".equals(B[i]) ? B[i] : doSomethingWith(B[i]));
}
Run Code Online (Sandbox Code Playgroud)
如果使用,优选Java 8,如何重构?
例如,我有这些数组
A = {"一","两","三","四"}
B = {"五","六","七","八"}
在代码的末尾,myList将是:
myList = {"one","five","two","six","three","seven","four","eight"}
我个人认为这不需要重构,因为任何"流式"代码都会比现有代码更不易读,也不那么直观,但作为一个纯粹的概念验证:
String[] A;
String[] B;
List<String> myList;
myList = IntStream.range(0, B.length)
.mapToObj(i -> new String[]
{
A[i],
"*".equals(B[i]) ? B[i] : doSomethingWith(B[i])
})
.flatMap(Arrays::stream)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
工作演示.
我们用来IntStream.range为我们的数组提供索引.
mapToObj每个索引映射到含有我们想要的元素的数组(也需要此阶段为IntStream::flatMap只能转换为另一种IntStream,我们希望将其转换为一个Stream的String多个).
flatMap 将每个数组映射到流,然后"展平"生成的流.
最后,我们只是collect结果.