Java8新特性—Stream流示例

本文深入探讨Java8中引入的Stream API,一种用于高效处理集合数据的强大工具。文章通过实例详细介绍了Stream的基本操作,包括筛选、切片、映射、排序、匹配、规约和收集等,并展示了如何利用Lambda表达式和并行处理提升编程效率。

Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错, 但使用 Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。所以说,Java 8 中首次出现的 java.util.stream 是一个函数式语言+多核时代综合影响的产物。

 

Stream示例:

public static void main(String[] args) {
        List<String> list = Arrays.asList("a", "a", "a", "b", "c", "d");
 
        // 创建流
        Stream<String> stream = list.stream();
 
        // 中间操作
        // 一、( 刷选和切片)
        // 1.filter排除过滤
        Stream<String> tmp1 = stream.filter((x) -> {
            return x.equals("a");
        });
        // 终止操作
        tmp1.forEach(System.out::println);
        tmp1.close();
 
        // 2.limit限制数量
        stream = list.stream();
        Stream<String> tmp2 = stream.limit(2);
        // 终止操作
        tmp2.forEach(System.out::println);
        tmp2.close();
 
        // 3.skip跳过元素
        stream = list.stream();
        Stream<String> tmp3 = stream.skip(3);
        // 终止操作
        tmp3.forEach(System.out::println);
        tmp3.close();
 
        // 3.distinct去除重复数据
        stream = list.stream();
        Stream<String> tmp4 = stream.distinct();
        // 终止操作
        tmp4.forEach(System.out::println);
        tmp4.close();
 
        stream.close();
 
        // 二、映射
        // 1.map——接收Lambda,将元素转换成其他形式的提取发
        // 1.map— 接收一个函数作为参数,该参数会应用到每一个元素上,并将其映射为一个新的元素。
        System.out.println("------------------------------------------");
        Stream<String> tmp5 = list.stream();
        tmp5.map((x) -> x.toUpperCase()).forEach(System.out::println);
 
        // 2.flatMap——接收一个函数作为参数,将流中的每一个值都转换成一个流,并将所有的流合并成一个流。
        // 如:{{a,b},{c,d},{e,f}}=>{a,b,c,d,e,f}
        // tmp5.flatMap((x) -> {
        // return null;
        // });
 
        // 3、排序
        System.out.println("------------------------------------------");
        Stream<String> tmp6 = list.stream();
        tmp6.sorted((x, y) -> {
            return x.compareTo(y);
        }).forEach(System.out::println);
 
        tmp6.close();
 
        // 4.匹配
        Stream<String> tmp7 = list.stream();
        boolean isMath = tmp7.allMatch((x) -> x.equals("a"));
        tmp7 = list.stream();
        isMath = tmp7.anyMatch((x) -> x.equals("a"));
        System.out.println(isMath);
        tmp7 = list.stream();
        // 总数
        long count = tmp7.count();
        System.out.println(count);
 
        // 三、规约(可以将流中元素结合,如:累加)
        List<Integer> intList = Arrays.asList(1, 2, 3, 4, 5);
        Stream<Integer> tmp8 = intList.stream();
        int sum = tmp8.reduce(0, (x, y) -> x + y);
        System.out.println(sum);
 
        // 四、收集(接收一个Collector接口的实现,将stream中的元素汇总成一个类型数据)
        List<Integer> cList = Arrays.asList(1, 2, 3, 4, 5);
        Stream<Integer> tmp9 = cList.stream();
        Set<Integer> set = tmp9.collect(Collectors.toSet());
        set.forEach(System.out::println);
        // 分组,根据条件分组
        Stream<Integer> tmp10 = Arrays.asList(1, 1, 2, 3, 5).stream();
        Map<Integer, List<Integer>> groupMap = tmp10.collect(Collectors.groupingBy((x) -> x));
 
    
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

beyondwild

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

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

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

打赏作者

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

抵扣说明:

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

余额充值