首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用流API将数字列表拆分为两个单独的奇偶数列表

使用流API将数字列表拆分为两个单独的奇偶数列表
EN

Stack Overflow用户
提问于 2021-02-10 11:12:35
回答 1查看 538关注 0票数 0

我正在研究Java8,希望在Java8中使用stream API执行以下操作。

输入: List of (1,2,3,4,5,6,7,8,9)

输出:奇数列表- (1,3,5,7,9)偶数列表- (2,4,6,8)

在传统的java中,我可以在单个for循环中完成这个操作。

代码语言:javascript
复制
List<Integer> ints = Arrays.asList(3,4,2,5,6,7,4,5);
List<Integer> oddList = new ArrayList<>();
List<Integer> evenList = new ArrayList<>();

for (Integer i : ints) {
    if (i % 2 == 0) {
        evenList.add(i);
    } else {
        oddList.add(i);
    }
}

我知道一个Java8风格的方法,如下所示-

代码语言:javascript
复制
List<Integer> evens = ints.stream().filter(i -> i % 2 == 0).collect(Collectors.toList());
List<Integer> odds = ints.stream().filter(i -> i % 2 == 1).collect(Collectors.toList());

但这里的问题是,我迭代int两次而不是一次。有没有一种方法可以做到这一点,而不需要在流中迭代两次?

EN

回答 1

Stack Overflow用户

发布于 2021-02-10 11:16:54

使用partitioningBy收集器。它将流收集到一个映射中,该映射有两个列表。一个列表包含满足谓词的元素,另一个列表包含不满足谓词的元素。

代码语言:javascript
复制
Map<Boolean, List<Integer>> partitions = ints.stream()
    .collect(Collectors.partitioningBy(x -> x % 2 == 0));
List<Integer> evens = partitions.get(true);
List<Integer> odds = partitions.get(false);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66130390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档