Stream流的中间操作
前提
public static List<Emploeer> getEmploer(){
List<Emploeer> list = new ArrayList<>();
list.add(new Emploeer(1,"张三",18,5000));
list.add(new Emploeer(2,"李四",20,5000));
list.add(new Emploeer(3,"王五",31,5000));
list.add(new Emploeer(4,"赵六",20,5000));
list.add(new Emploeer(5,"田七",19,5000));
return list;
}
过滤
List<Emploeer> list = getEmploer();
list.stream().filter(s->s.getAge()>18).forEach(System.out::println);
此代码过滤了年龄大于18的员工
去重
list.stream().distinct().forEach(System.out::println);
将相同的数据进行去重
切片
list.stream().skip(1).forEach(System.out::println);
将指定穿过流的第几条数据过滤,由参数决定。
映射
list.stream().map(s->s.getAge()).forEach(System.out::println);
map:参数为接收函数实现,应用给当前Stream操作的每一个元素,每一个元素作用参数函数之后会返回一个新结果(元素)最终所有元素作为结果返回。
map特点:每一个元素作用参数函数映射出的新结果可以为数据也可以为流
eg
List<String> list = List.of("aaa","bbb","ccc");
Stream<Stream<Character>> stream = list.stream().map(s->getCharacter(s));//{{a,a,a},{b,b,b},{}}
另一个映射flatMap
Stream<Character> stream1 = list.stream().flatMap(s -> getCharacter(s));//{a,a,a,b,b,b,c,c,c}
flatMap与map的区别是flatmap返回的一个整体的大流,而map返回的可以是一个大流里面包含着一个小流也可是一个大流里面直接包含数据。
排序
list.stream().sorted((a,b)->a.getAge()-b.getAge()).forEach(System.out::println);
对流进行升序排序,里面由内部比较器可以自己定义,也可以直接用内部比较器。