大家好,参考:https://zhuanlan.zhihu.com/p/265826395
2常用的流
- 2.1 collect(Collectors.toList())
将流转为list
List<String> list = Stream.of("1,2,3").collect(Collectors.toList());
System.out.println(list);
- 2.2 filter
这是用到的数据
List<Person> personList = new ArrayList<Person>();
personList.add(new Person("Tom", 8900, 23, "male", "New York"));
personList.add(new Person("Jack", 7000, 25, "male", "Washington"));
personList.add(new Person("Lily", 7800, 21, "female", "Washington"));
personList.add(new Person("Anni", 8200, 24, "female", "New York"));
personList.add(new Person("Owen", 9500, 25, "male", "New York"));
personList.add(new Person("Alisa", 7900, 26, "female", "New York"));
代码展示
List<Person> list = personList.stream()
.filter(p -> p.getSalary() > 3000)
.collect(Collectors.toList());
- 2.3 map
转换功能,内部是function接口;惰性求值
List<String> names = personList.stream()
.map(p -> p.getName())
.collect(Collectors
.toList());
-
2.4 flatmap
将多个Stream合并 -
2.5 max和min
Integer max = personList.stream()
.max(Comparator.comparing(e -> e.getSalary()))
.get()
.getSalary();
-2.6 count
long count = personList.stream()
.filter(s1 -> s1.getSalary() > 3000)
.count();
-2.7 reduce
Integer reduce = Stream.of(1, 2, 4, 5).reduce(0, (acc, x) -> acc + x);
三、高级集合类及收集器
-3.1 转换成值
收集器,一种通用的、从流生成复杂值的结构。只要将它传给 collect 方法,所有的流就都可以使用它了。
- 3.2转换成块
Map<Boolean, List<Person>> listMap =
personList.stream()
.collect(Collectors.partitioningBy(p -> p.getName().contains("s")));
System.out.println(listMap);
- 3.3 数据分组
Map<String, List<Person>> listMap = personList.stream()
.collect(Collectors.groupingBy(p -> p.getSex()));
System.out.println(listMap);
-3.4 字符串拼接
String names = personList.stream()
.map(Person::getName)
.collect(Collectors.joining("/", "[", "]"));