jdk8的stream处理双重循环
时间: 2023-05-10 19:50:30 浏览: 1160
在JDK8中,引入了Stream API,这个API提供了一种更加简洁,高效的方式来处理数据的流式操作,Stream API支持对数据流进行过滤、映射、排序、聚合等多种操作。对于双重循环的情况,JDK8的Stream提供了三种方式:flatMap、forEach和reduce。
1. flatMap:flatMap操作可以将一个Stream中的每个元素转换成另一个Stream,然后将所有Stream合并成一个。在处理双重循环的情况下,我们可以使用flatMap将两个Stream合并成一个,然后对结果进行处理。示例代码如下:
```
List<Integer> list1 = Arrays.asList(1, 2, 3);
List<Integer> list2 = Arrays.asList(3, 4);
List<int[]> result = list1.stream()
.flatMap(i -> list2.stream()
.map(j -> new int[]{i, j}))
.collect(Collectors.toList());
result.forEach(arr -> System.out.println(Arrays.toString(arr)));
```
2. forEach:forEach操作可以对Stream中的每个元素执行指定的操作。我们可以在forEach中嵌套一层循环来处理双重循环的情况。示例代码如下:
```
List<Integer> list1 = Arrays.asList(1, 2, 3);
List<Integer> list2 = Arrays.asList(3, 4);
list1.forEach(i -> {
list2.forEach(j -> {
int[] arr = new int[]{i, j};
System.out.println(Arrays.toString(arr));
});
});
```
3. reduce:reduce操作可以将Stream中的元素通过指定的操作进行合并,返回一个Optional类型的结果。我们可以在reduce中嵌套一层循环来处理双重循环的情况。示例代码如下:
```
List<Integer> list1 = Arrays.asList(1, 2, 3);
List<Integer> list2 = Arrays.asList(3, 4);
List<int[]> result = list1.stream()
.reduce(new ArrayList<>(), (acc, i) -> {
list2.forEach(j -> acc.add(new int[]{i, j}));
return acc;
}, (l1, l2) -> {l1.addAll(l2); return l1;});
result.forEach(arr -> System.out.println(Arrays.toString(arr)));
```
总之,在JDK8中处理双重循环可以使用flatMap、forEach和reduce等操作来实现,这些操作让Java代码变得更加简洁、高效、易于理解。
阅读全文