我是Java 8的新手。我只是想知道如何使用Java 8流进行以下操作。有什么建议
<uses-permission android:name="android.permission.INTERNET"/>
输出:
public static void main(String[] args) {
Integer[] arr1 = new Integer[]{1, 2, 3};
Integer[] arr2 = new Integer[]{4, 5, 6};
Integer[] arr3 = new Integer[]{7, 8, 9};
for(int i=0; i<arr1.length; i++){
System.out.println(listFromIndex(arr1[i], arr2[i], arr3[i]));
}
}
private static List<Integer> listFromIndex(Integer e, Integer e1, Integer e2) {
List<Integer> list = new ArrayList<>();
list.add(e) ;
list.add(e1) ;
list.add(e2) ;
return list;
}
答案 0 :(得分:1)
假设数组的长度相同,则可以执行以下操作:
IntStream.range(0, arr1.length)
.mapToObj(i -> listFromIndex(arr1[i], arr2[i], arr3[i]))
.forEach(System.out::println);
答案 1 :(得分:1)
如果所有数组的长度都相同,则可以使用以下方法:
List<Integer[]> arrays = Arrays.asList(arr1, arr2, arr3);
IntStream.range(0, arr1.length)
.mapToObj(i -> arrays.stream().map(a -> a[i]).collect(Collectors.toList()))
.forEach(System.out::println);
这将创建一个包含所有数组的列表。之后,它将创建一个遍历所有数组的流,并收集新数组。
这将打印以下结果:
[1, 4, 7]
[2, 5, 8]
[3, 6, 9]
如果您使用长度不同的数组,则可以使用以下内容:
Integer[] arr1 = new Integer[]{1, 2, 3};
Integer[] arr2 = new Integer[]{4, 5};
Integer[] arr3 = new Integer[]{7};
List<Integer[]> arrays = Arrays.asList(arr1, arr2, arr3);
IntStream.range(0, arrays.stream().mapToInt(a -> a.length).max().orElseThrow())
.mapToObj(i -> arrays.stream().map(a -> i < a.length ? a[i] : null).collect(Collectors.toList()))
.forEach(System.out::println);
这将使用最大数组的长度,并在收集结果数组之前检查i
。
结果将是这样:
[1, 4, 7]
[2, 5, null]
[3, null, null]