Stream使用实际就是把
- 集合对象转换为stream对象
- 对stream对象进行过滤筛选等操作
- 筛选后的结果又转换为集合,或者返回统计结果
串行:.stream()
并行:.parallelStream()
1. 集合转换为Stream对象
- collection集合转换成stream对象
list.stream()
set.stream()
- 数组转换成stream对象
Stream.of(String)
2. Stream中常用的方法
过滤相关
-
filter()方法
过滤,箭头后面跟着的是一个boolean值,可以写任何的过滤条件,就相当于sql中where后面的东西,能用sql实现的功能这里都可以实现List<User> filterList = list.stream().filter(user -> user.getSex() == 1) .collect(toList());
-
sored()方法
对年龄进行排序List<User> sortedList = list.stream().sorted(Comparator.comparingInt(User::getAge)) .collect(toList());
-
limit(n)方法
返回前n个元素 -
skip(n)方法
去除前n个元素,返回后面的元素 -
distinct()方法
去重//map(T->R) List<String> cityList = list.stream().map(User::getAddress).distinct().collect(toList());
查找相关
-
findFirst()方法
查找第一个元素 -
findAny()方法
查找任意一个元素 -
allMatch()方法
是否所有都满足条件,返回boolean
都是男生返回truelist.stream().allMatch(user -> user.getSex() == 1);
-
noneMatch()方法
是否所有都不满足条件,返回boolean
都不是男生返回truelist.stream().noneMatch(user -> user.getSex() == 1);
-
anyMatch()方法
是否存在满足条件的,返回boolean
有男生返回truelist.stream().anyMatch(user -> user.getSex() == 1);
映射相关
-
flatMap方法
将流中的每一个元素 T 映射为一个流,再把每一个流连接成为一个流。
//flatMap(T -> Stream<R>) List<String> flatList = new ArrayList<>(); flatList.add("唱,跳"); flatList.add("rape,篮球,music"); flatList = flatList.stream().map(s -> s.split(",")).flatMap(Arrays::stream).collect(toList());
-
map方法
map是将T类型的数据转为R类型的数据
//map(T->R) List<String> list = list.stream().map(User::getName).distinct().collect(toList());
统计相关
-
count方法
返回统计的数量 -
max方法
返回最大值Optional<User> max = users.stream().max(Comparator.comparingInt(User::getAge));
-
min方法
返回最小值Optional<User> max = users.stream().min(Comparator.comparingInt(User::getAge));
遍历相关
-
forEach方法
list.stream().forEach(item -> { System.out.println("item="+item); });
-
forEachOrdered方法
和forEach主要的区别在并行流的处理上
forEach输出的顺序不一定(效率更高)
forEachOrdered输出的顺序与元素的顺序严格一致
3. Stream转换为集合
- stream转换为list集合
stream对象.collect(Collectors.toList())
- stream转换为set集合
stream对象.collect(Collectors.toSet())
- stream转换为数组
stream对象.toArray(Integer[]::new)
参考:https://segmentfault.com/a/1190000019574204#articleHeader5