当前位置: 首页 > 知识库问答 >
问题:

使用stream API将数字列表拆分为两个独立的奇数和偶数列表[重复]

慕容高卓
2023-03-14

我正在学习Java8,并希望使用Java8中的流API执行以下操作。

输入:(1,2,3,4,5,6,7,8,9)清单

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);
    }
}
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());

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

共有1个答案

郭通
2023-03-14

使用PartitioningBy收集器。它将流收集到一个地图中,该地图有2个列表。一个列表包含满足谓词的元素,另一个包含不满足谓词的元素。

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);
 类似资料:
  • 我有一个可能超过1000个字符串的列表,但我不知道具体有多少个。 将此拆分为更小的列表而不丢失列表的任何成员的最佳方法是什么? 例如,如果我有一个成员列表,如何最好地将其拆分为3个几乎大小均匀的列表? 我已经看到了通过分区函数拆分列表的方法,但该函数会将列表拆分为给定大小的块,而不是给定数量的组(子列表)。

  • 问题内容: 我将数据保存在postgreSQL数据库中。我正在使用Python2.7查询此数据并将其转换为Pandas DataFrame。但是,此数据框的最后一列中包含值的字典(或列表?)。DataFrame看起来像这样: 我需要将此列拆分为单独的列,以便DataFrame如下所示: 我遇到的主要问题是列表的长度不同。但是所有列表最多只能包含相同的3个值:a,b和c。而且它们始终以相同的顺序出现

  • 问题内容: 这个问题类似于将 列表切成子列表的列表 ,但是在我的情况下,我想包括每个先前子列表的最后一个元素,作为下一个子列表的第一个元素。并且必须考虑到最后一个元素必须始终至少包含两个元素。 例如: 大小为3的子列表的结果: 问题答案: 通过简单地缩短传递到范围的“ step”参数,可以轻松地将链接的答案中的列表理解用于支持重叠的块: 这个问题的其他访问者可能没有足够的精力来处理输入 列表 (可

  • 如何使用流将Java列表拆分为Java大小为的较小列表? 在JavaScript中,我会使用函数并执行如下操作: 我试图用Java流来实现这一点,但我似乎不知道如何让它允许我使用数组列表

  • 给定一个< code>n数和sum 的列表,将这些数分成< code >两个组,使得每组中的数之和小于或等于s。如果可以分组,则打印< code>YES,如果不能分组,则打印< code>NO。 例如,如果< code>n=3,s=4和< code>n数是< code>2,4,2。在这种情况下,输出为< code>YES,因为可以形成两个组< code>(2,2)和(4)。 我的解决方案如下。 是

  • 我有一个数据帧: 如何拆分该列,使每个值都在自己的列中? 我找到的唯一答案是关于将一列拆分成两列。如何将一列拆分成两列?