当前位置: 首页 > 图灵资讯 > 技术篇> java Stream流将List均分成一个新

java Stream流将List均分成一个新

来源:图灵教育
时间:2023-12-10 14:19:43

Java Stream流将List分成新的引言

在开发过程中,我们经常需要对List进行分组或均分操作。Java Stream流的引入提供了一种简单而强大的处理数据收集的方法。

这篇文章将教小白如何使用Java Stream流将一个List分成多个新的List。

步骤概述

以下是实现此功能的总体步骤:

flowchart TD    A(将List转换为Stream) --> B(使用Streamcollect方法)    B --> C(使用Collectors.partitioningBy方法)    C --> D(使用Collectors.mapping方法)    D --> E(使用Collectors.tolist方法)

接下来,我们将详细介绍每个步骤和需要使用的代码。

第一步:将List转化为Streamm

首先,我们需要将List转换为Stream对象。可以通过调用List的stream()来实现。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);Stream<Integer> stream = list.stream();
第二步:使用Streamcolect方法

下一步,我们需要使用Stream的collect方法来集合对流,并将结果保存到新的List中。

List<Integer> resultList = stream.collect(Collectors.toList());
第三步:使用Collectors.partitiongB方法

为了将List分成多个新的List,我们可以使用Collectorst.partitioningBy方法。该方法接受将元素分为两部分的Predicate参数。

Map<Boolean, List<Integer>> partitionedMap = resultList.stream()        .collect(Collectors.partitioningBy(e -> e % 2 == 0));

上述代码根据是否为偶数将List中的元素分组,返回Map对象,其中键为true代表偶数,键为false代表奇数。

第四步:使用Collectors.mapping方法

在获得分组后的Map对象后,我们可以进一步处理每个分组。在这里,我们使用collectors.mapping方法转换每个分组中的元素。

Map<Boolean, List<String>> mappedMap = partitionedMap.entrySet().stream()        .collect(Collectors.toMap(Map.Entry::getKey,                e -> e.getValue().stream().map(String::valueOf).collect(Collectors.toList())));

上述代码将每个分组中的元素转换为字符串,并保存在新的List中。

步骤5:使用Collectors.tolist方法

最后,我们可以使用Collectors.tolist方法将转换后的每个分组结果保存到新的list中。

List<List<String>> finalList = new ArrayList<>(mappedMap.values());

到目前为止,我们已经得到了将List均分为多个新List的最终结果。

完整的代码示例

以下是完整的代码示例:

import java.util.*;import java.util.stream.Collectors;import java.util.stream.Stream;public class ListPartitionExample {    public static void main(String[] args) {        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);        Stream<Integer> stream = list.stream();        List<Integer> resultList = stream.collect(Collectors.toList());        Map<Boolean, List<Integer>> partitionedMap = resultList.stream()                .collect(Collectors.partitioningBy(e -> e % 2 == 0));        Map<Boolean, List<String>> mappedMap = partitionedMap.entrySet().stream()                .collect(Collectors.toMap(Map.Entry::getKey,                        e -> e.getValue().stream().map(String::valueOf).collect(Collectors.toList())));        List<List<String>> finalList = new ArrayList<>(mappedMap.values());        System.out.println(finalList);    }}

运行上述代码将输出:[[1, 3, 5, 7, 9], [2, 4, 6, 8, 10]],原List将被分成两个新的List。

总结

通过上述步骤,我们成功地使用了Java。 Stream流将一个List分成多个新的List。首先,我们将List转换为Stream,然后使用collect对流进行集合操作,并将其保存到新的List中。接下来,我们根据条件使用partitioningBy法对List进行分组,并使用maping法对每个分组进行转换。最后,我们使用tolist将转换后的每个分组结果保存到新的list中。