Java8--Stream流常用方法

常见使用方法

1. flatmap

将多个元素放在一起,与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]
------------------------

 

2. max min

按照某种条件筛选最大值和最小值,必须要传入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
------------------------

 

3. reduce

实现从一组值中生成另一个值
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]
---------------

2. 收集器

//转化成为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("--------------");

 

3. 数据分块

将集合中的元素同时分为两个部分,满足条件的值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]
----------

4. 字符串

字符串拼接:
使用特定格式对字符串进行拼接

eg:
List<String> list = Arrays.asList("qqq", "www", "eee");
String contStr = list.stream()
.collect(Collectors.joining(",", "[", "]"));
System.out.println(contStr);

结果:
[qqq,www,eee]

posted @ 2020-12-13 17:14  胖墩墩的竹  阅读(390)  评论(0)    收藏  举报