【Java】java8:stream特性详解,原来如此强大
首先谈谈Stream的概念以及Java为什么引入Stream
Stream是JAVA8引入的重要特性之一,它是对数据源的一个封装,通过这个封装对象可以对数据源进行处理,Stream本身并不是数据存储容器,跟数据结构也没有直接关系。
为什么要引入Stream呢?没有Stream的JAVA7以及之前的版本,也一样可以处理数据啊?
这里要提到“函数式”编程了,熟悉python和Scala的朋友可能对函数式编程有一定的认知,函数式编程的方式在数据处理上非常的高效,java8 在设计的时候应该是重点考虑了支持函数式编程模式,Stream仅仅是其特性之一,像lamda表达式、函数式接口等特性也都是为函数式编程服务的。
如何构造Stream
- Stream.of 方法
- List对象可以直接获取到Stream;如:stringList.stream()
- Stream.builder().build(); 方式
如何利用stream来高效处理数据
1.数据遍历并处理 forEach方法
String[] strs = {"a", "b", "c", "d"};
Stream<String> stringStream = Stream.of(strs);
stringStream.forEach(s -> System.out.println(s));
2. 数据转换 map方法
面向函数式编程,一般倾向于数据对象是不可变的,当需要改变的时候可以生成新的对象,map就是完成对象的映射;比如将小写字母转为大写字母;
List<String> upperCase = stringStream.map(s -> s.toUpperCase()).collect(Collectors.toList());
3. 数据过滤 filter方法
stream 的filter方法示例
4. findFirst 找到第一个元素
findFirst方法示例
5. Stream 转数组
String[] upperCase = stringStream.map(s -> s.toUpperCase()).toArray(String[]::new);
6. flatMap 处理
7.peek处理
peek也是循环遍历,与forEach的不同之处在于遍历完之后还会返回原有的Stream本身。forEach没有返回;
stream peek方法示例
- 其他方法:
.count方法、.skip 方法 .limit 方法 .sort方法 .max求最大值 .min 求最小值 .distinct() 去重方法;
元素匹配判断:allMatch, anyMatch, and noneMatch
Stream可以转为set或map,与转List的方式类似,通过Collectors提供的toSet、toMap方法
reduce方法
partitioningBy方法
groupingBy方法
更多使用案例可以关注并私信我来获取。
其他特性
- 惰性求值
- 支持是否选择并发计算,通过.parallel()方法实现
零基础学习Java编程可以加入我的十年Java学习园地。
以上是 【Java】java8:stream特性详解,原来如此强大 的全部内容, 来源链接: utcz.com/a/103038.html