ng.*_*bie 1 java java-8 java-stream
我最近遇到了一个面试问题,要求我从List. 唯一的问题是我不能使用如下 2 个过滤器:
List<Integer> nums = Arrays.asList(1,2,3,4,5);
List<Integer> odd = nums.stream().filter(n -> n%2 != 0).collect(Collectors.toList());
List<Integer> even = nums.stream().filter(n -> n%2 == 0).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
我说这是不可能的,因为最终collect方法只能返回 1 个列表。
我错过了什么?
您可以使用Collectors.partitioningBy:
Map<Boolean, List<Integer>> response = nums.stream()
.collect(Collectors.partitioningBy(n -> n % 2 == 0));
Run Code Online (Sandbox Code Playgroud)
这将返回:
{false=[1, 3, 5], true=[2, 4]}
Run Code Online (Sandbox Code Playgroud)
要将它们分开,您可以使用:
List<Integer> evens = response.get(true);
List<Integer> odds = response.get(false);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
402 次 |
| 最近记录: |