java8 steam遍历同时返回两个list
时间: 2023-08-02 16:10:42 浏览: 69
您好,可以使用 Java 8 Stream API 的 `collect` 方法结合 `Collectors.partitioningBy` 方法来将一个集合按照某个条件分成两个集合,具体实现如下:
```
List<String> list = Arrays.asList("apple", "banana", "orange", "watermelon", "pear");
Map<Boolean, List<String>> result = list.stream()
.collect(Collectors.partitioningBy(s -> s.startsWith("a") || s.startsWith("o")));
List<String> startWithAorO = result.get(true);
List<String> others = result.get(false);
```
上述代码中,`list` 集合中的元素按照它们是否以字母 "a" 或 "o" 开头进行分组,返回的 `result` 是一个 `Map<Boolean, List<String>>` 类型的对象,其中键是布尔类型,代表分组的条件(true 代表以 "a" 或 "o" 开头,false 代表不是),值是分组后的集合。最后,我们可以通过 `result.get(true)` 和 `result.get(false)` 来获取两个分组后的集合。
如果您需要同时返回两个分组后的集合,您可以将上述代码中的 `result` 变量替换为一个包含两个空集合的列表,然后在 `collect` 方法中使用 `Collectors.groupingBy` 方法来分组,具体实现如下:
```
List<String> list = Arrays.asList("apple", "banana", "orange", "watermelon", "pear");
List<List<String>> result = new ArrayList<>();
result.add(new ArrayList<>()); // 存放以 a 或 o 开头的元素
result.add(new ArrayList<>()); // 存放不以 a 或 o 开头的元素
Map<Boolean, List<String>> groups = list.stream()
.collect(Collectors.groupingBy(s -> s.startsWith("a") || s.startsWith("o")));
result.get(0).addAll(groups.get(true));
result.get(1).addAll(groups.get(false));
List<String> startWithAorO = result.get(0);
List<String> others = result.get(1);
```
上述代码中,我们定义了一个包含两个空集合的列表 `result`,它用来存放分组后的结果。接着,我们使用 `Collectors.groupingBy` 方法来将集合分成两个部分,然后将分组后的结果添加到 `result` 列表中的对应位置。最后,我们可以通过 `result.get(0)` 和 `result.get(1)` 来获取两个分组后的集合。
希望对您有所帮助。