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

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 个列表。

我错过了什么?

YCF*_*F_L 5

您可以使用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)