Collection操作Stream流

本文展示了如何在Java中使用Stream流进行各种转换,包括将Stream转换回List、Set、Map以及TreeSet,并利用Collectors工具类进行分组和分区操作。示例代码详细解释了Stream流在处理集合数据时的实用方法,如求和、平均值等统计信息。

是什么?

Collection可以将Stream流转换为不同的类型

(什么是Stream流:http://t.csdn.cn/GnYJg

为什么?

当我们在使用Stream流对集合或者数组进行操作的时候,最终会转换为Stream流对象,但是我们最终想得到的又是原来的对象,因此我们可以使用Collection来对Steam进行转换

怎么做?

通过下面的案例来演示:

 public static void main(String[] args) {

        //collection:将流转换为其他类型
        List <Integer> list = Arrays.asList(1,2,3,451,51);

        //先将list转换为流
        Stream<Integer> stream = list.stream();
        System.out.println(stream);
        System.out.println("===========================");

        //将流转换为list
        List<Integer> collect = stream.collect(Collectors.toList());
        System.out.println(collect);
        System.out.println("===========================");


        //将流转换为set
        Set<Integer> integerSet = list.stream().collect(Collectors.toSet());
        System.out.println(integerSet);

        System.out.println("===========================");

        //将流转换为map
        Map<Integer, Integer> collect1 = list.stream().collect(Collectors.toMap(k -> k, v -> v));
        System.out.println(collect1);
        System.out.println("===========================");

        //将流转换为treeset
        TreeSet<Integer> tree= list.stream().collect(Collectors.toCollection(()->new TreeSet<>()));
        System.out.println(tree);
        System.out.println("===========================");

        //可以很明显的发现summarizingint里面包含了求个数,求和,求平均数和最大最小值的方法
        IntSummaryStatistics collect2 = list.stream().collect(Collectors.summarizingInt(ele -> ele));
        System.out.println(collect2);

    }
}

分组与分区操作(了解)

        当我们在拿到一串数据的时候往往想根据其数据的不同特性来对它进行分类;

        我们可以使用Collection中的Collectors.groupingBy和Collectors.partitioningBy来对其进行分组和分区

        Collectors.groupingBy()对元素做group操作。分组--根据条件分成多个组         Collectors.partitioningBy()对元素进行二分区操作。分区--根据boolean条件分成两个区

是的,Map 接口提供了一些方法来支持使用 Stream 进行操作。你可以将 Map 转换为 Stream ,然后使用操作方法进行过滤、映射、排序等操作。 下面是一些常用的与 Stream 相关的 Map 方法: - `entrySet()`: 将 Map 转换为包含键值对的 Set 集合。 - `keySet()`: 将 Map 的键转换为 Set 集合。 - `values()`: 将 Map 的值转换为 Collection 集合。 - `forEach(BiConsumer)`: 对 Map 中的每个键值对执行指定的操作- `stream()`: 将 Map 转换为顺序Stream)。 - `parallelStream()`: 将 Map 转换为并行(ParallelStream)。 这些方法可以使你更方便地在 Map 上使用 Stream 操作。例如,你可以使用 `entrySet()` 方法将 Map 转换为键值对的 Set,然后使用 Stream 对键值对进行过滤、映射等操作。 以下是一个示例代码,展示了如何使用 Stream 操作 Map: ```java import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("A", 1); map.put("B", 2); map.put("C", 3); map.put("D", 4); // 使用 Stream 过滤出值大于 2 的键值对,并打印出结果 map.entrySet() .stream() .filter(entry -> entry.getValue() > 2) .forEach(entry -> System.out.println(entry.getKey() + ": " + entry.getValue())); } } ``` 在上述示例中,我们首先创建了一个包含键值对的 Map。然后,我们使用 `entrySet().stream()` 将 Map 转换为 Stream 。接着我们使用 `filter()` 方法筛选出值大于 2 的键值对,并使用 `forEach()` 方法打印出结果。输出结果是键 "C" 和对应的值 3。 这只是 Stream 操作 Map 的一个简单示例,你可以根据具体需求使用不同的操作方法来对 Map 进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Strine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值