Java8--Stream流常用方法
常见使用方法
将多个元素放在一起,与map不同的是这里返回的值必须是Stream
eg:
List<List<String>> lists = new ArrayList<>();
List<String> list = Arrays.asList("aaa", "bbb", "ccc", "ddd");
lists.add(list);
lists.add(list);
lists.add(list);
lists.add(list);
System.out.println("------------------------");
System.out.println(lists);
List<String> resList = lists.stream()
.flatMap(value -> value.stream())
.collect(Collectors.toList());
System.out.println("------------------------");
System.out.println(resList);
System.out.println("------------------------");
结果:
------------------------
[[aaa, bbb, ccc, ddd], [aaa, bbb, ccc, ddd], [aaa, bbb, ccc, ddd], [aaa, bbb, ccc, ddd]]
------------------------
[aaa, bbb, ccc, ddd, aaa, bbb, ccc, ddd, aaa, bbb, ccc, ddd, aaa, bbb, ccc, ddd]
------------------------
按照某种条件筛选最大值和最小值,必须要传入Comparator;
返回的是一个Optional对象;
eg:
List<String> list = Arrays.asList("aaaa", "bbbcccd", "ccc", "ddd");
String maxRes = list.stream()
.max(Comparator.comparing(String::length))
.get();
System.out.println("maxRes: " + maxRes);
Optional<String> minOptional = list.stream()
.min(Comparator.comparing(String::length));
String minRes = minOptional.get();
System.out.println("minRes: " + minRes);
结果:
------------------------
maxRes: bbbcccd
------------------------
minRes: ccc
------------------------
实现从一组值中生成另一个值
max, min也是相当于reduce方法
eg:
List<Integer> list = Arrays.asList(1, 2, 3);
Integer res = list.stream()
.reduce(0, (acc, element) -> acc + element);
System.out.println(res);
结果:
6
集合类
1. 元素顺序
如果集合本身是无序的,生成的流也是无序的;
出现顺序的定义依赖于数据源和对流的操作;
eg:
Set<Integer> set = new HashSet<>(Arrays.asList(44444, 2333, 12432, 53232));
System.out.println("---------------");
List<Integer> resList = set.stream()
.collect(Collectors.toList());
System.out.println(resList);
System.out.println("---------------");
List<Integer> list2 = set.stream()
.sorted()
.collect(Collectors.toList());
System.out.println(list2);
System.out.println("---------------");
结果:
---------------
[12432, 53232, 44444, 2333]
---------------
[2333, 12432, 44444, 53232]
---------------
//转化成为TreeSet
List<String> list = Arrays.asList("bbb", "aaa", "cccc");
TreeSet<String> treeSet = list.stream()
.collect(Collectors.toCollection(TreeSet::new));
System.out.println("--------------");
System.out.println(treeSet);
System.out.println("--------------");
//最大数
Optional<String> optional = list.stream()
.collect(Collectors.maxBy(String::compareTo));
String maxElement = optional.get();
System.out.println(maxElement);
System.out.println("--------------");
//平均数
Double aveRes = list.stream()
.collect(Collectors.averagingInt(String::length));
System.out.println(aveRes);
System.out.println("--------------");
将集合中的元素同时分为两个部分,满足条件的值key为”true“,否则用”false“接收
eg:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
Map<Boolean, List<Integer>> map = list.stream()
.collect(Collectors.partitioningBy(value -> value%2 == 0));
System.out.println("----------");
System.out.println("满足条件:" + map.get(true));
System.out.println("不满足条件的:" + map.get(false));
System.out.println("----------");
结果:
----------
满足条件:[2, 4, 6]
不满足条件的:[1, 3, 5]
----------
字符串拼接:
使用特定格式对字符串进行拼接
eg:
List<String> list = Arrays.asList("qqq", "www", "eee");
String contStr = list.stream()
.collect(Collectors.joining(",", "[", "]"));
System.out.println(contStr);
结果:
[qqq,www,eee]

浙公网安备 33010602011771号