Stream总结
简介
Stream
函数式编程接口最初是在Java 8中引入的,并且与lambda一起成为Java开发的里程碑式的功能特性,它极大的方便了开放人员处理集合类数据的效率。
Stream
就是一个数据流经的管道,并且在管道中对数据进行操作,然后流入下一个管道 。
collect
合并流
Person p1 = new Person("Tom", 11);
Person p2 = new Person("Jack", 12);
Person p3 = new Person("Jane", 15);
Person p4 = new Person("Mike", 14);
Person p5 = new Person("John", 13);
List<Person> newList = Stream.of(p1, p2, p3, p4, p5)
.collect(Collectors.toList());
System.out.println(newList);
//[Person{name='Tom', age=11}, Person{name='Jack', age=12}, Person{name='Jane', age=15}, Person{name='Mike', age=14}, Person{name='John', age=13}]
filter
过滤流
List<Person> newList = Stream.of(p1, p2, p3, p4, p5)
.filter(p -> p.getAge() > 13)
.collect(Collectors.toList());
System.out.println(newList);
//[Person{name='Jane', age=15}, Person{name='Mike', age=14}]
map
转换流
List<String> newList = Stream.of(p1, p2, p3, p4, p5)
.map(p -> p.getName())
.collect(Collectors.toList());
System.out.println(newList);
//[Tom, Jack, Jane, Mike, John]
flatMap
将多个Stream合并为一个Stream
List<String> newList = Stream.of(p1, p2, p3)
.flatMap(p -> Arrays.stream(p.getName().split("")))
.collect(Collectors.toList());
System.out.println(newList);
//[T, o, m, J, a, c, k, J, a, n, e]
max & min
获取最大和最小值
Optional<Person> max = Stream.of(p1, p2, p3, p4, p5)
.max((o1, o2) -> o1.getAge() - o2.getAge());
Optional<Person> min = Stream.of(p1, p2, p3, p4, p5)
.min(Comparator.comparing(p -> p.getAge()));
System.out.println(max.get());
System.out.println(min.get());
//Person{name='Jane', age=15}
//Person{name='Tom', age=11}
count
统计数量
long count = Stream.of(p1, p2, p3, p4, p5)
.filter(p -> p.getAge() > 13)
.count();
System.out.println(count);
//2
reduce
累加计算
Integer reduce = Stream.of(1, 2, 3, 4, 5)
.reduce(0, (acc, x) -> acc + x);
System.out.println(reduce);
//15
Collectors.joining
字符串拼接
String newStr = Stream.of(p1, p2, p3, p4, p5)
.map(p -> p.getName())
.collect(Collectors.joining("-", "[", "]"));
//[Tom-Jack-Jane-Mike-John]