带有单个过滤器的奇数和偶数?

我最近遇到了一个面试问题,要求我从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);


以上是带有单个过滤器的奇数和偶数?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>