- 前言
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
- 什么是Stream
流的过程
Stream(流)是一个来自数据源的元素队列并支持聚合操作。
数据源 可以是集合,数组,I/O channel, 产生器generator 等;
聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等;
- 如何使用Stream
talk is cheap,show me the code;废话不多说,边看代码边学
1.生成流:直接通过Stream.of()构造,或者集合通过 .stream()
Stream stream = Stream.of("apple","apple", "banana", "orange"); // 下文将以此为例子//集合生成流Stream stream1 = list.stream();// 这种是并行流,有些情况下会提升数据处理速度Stream stream2 = list.parallelStream();
2. 使用流
//遍历 forEach 操作 stream.forEach(e -> System.out.println(e)); // apple banana orange
//遍历 forEach 操作 stream.forEach(e -> System.out.println(e)); // apple banana orange// map 操作,可以将二维数据转成一维的,比如只需要实体中某个属性,开发中经常用到Stream.map(e -> e.length) //转成单词的长度 int .forEach(System.out::println);
// map 可以将二维数据转成一维的,比如只需要实体中某个属性,开发中经常用到Stream.map(String::length) //转成单词的长度 int .forEach(System.out::println); //5,5,6,6
//filter 过滤某些不符合条件的元素stream.filter(e -> e.equals("apple")).forEach(e -> System.out.println(e)); // apple,apple
//distinct 去重stream.distinct().forEach(e -> System.out.println(e)); //apple,banana ,orange
//sorted 排序 底层依赖Comparable 实现,也可以提供自定义比较器stream.sorted().forEach(e -> System.out.println(e)); // apple,apple,banana ,orange
//collect 收集,使用系统提供的收集器可以将最终的数据流收集到List,Set,Map等容器中List collect = stream.collect(Collectors.toList()); collect.forEach(e -> System.out.println(e));//apple,apple,banana ,orange
- 总结
上面笔者只是简单的介绍了常用流的几种方法,还有一些方法和更复杂的杂糅操作之后再介绍,今天只是让小伙伴有一个对流的认识。好了,今天就到这里了,喜欢的小伙伴点个关注吧[奋斗]