带有单个过滤器的奇数和偶数?
我最近遇到了一个面试问题,要求我从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());
我说这是不可能的,因为最终collect方法只能返回 1 个列表。
我错过了什么?
回答
您可以使用Collectors.partitioningBy:
Map<Boolean, List<Integer>> response = nums.stream()
.collect(Collectors.partitioningBy(n -> n % 2 == 0));
这将返回:
{false=[1, 3, 5], true=[2, 4]}
要将它们分开,您可以使用:
List<Integer> evens = response.get(true);
List<Integer> odds = response.get(false);