* Stream的三个操作步骤
* 1、创建Stream
* 2、中间操作
* 3、终止操作(终端操作)
List<Student> students = Arrays.asList(
new Student("张三", "男", 11),
new Student("李四", "女", 11),
new Student("王五", "男", 22),
new Student("赵六", "女", 21),
new Student("赵六", "女", 21),
new Student("赵六", "女", 21));
//中间操作
/*
筛选与切片
filter--接收Lambda,从流中排除某些元素。
limit--截断流,使其元素不超过给定数量
skip(n)--跳过元素,返回一个扔掉了前n个元素的流。若流中元素不足n个,则返回一个空流。与limit(n)互补
(跳过N个,从N+1个开始取)
distinct--筛选,通过流所生成元素的hashcode和equals去除重复元素
*/
// filter
students.stream().filter(x->x.getAge>15).foreach(System.out::println);
//中间操作:不会执行任何操作
/*
* 多个中间操作可以连接起来形成一个流水线,除非流水线上出发终止操作,否则中间操作不会执行任何的处理!
* 而在终止操作一次性全部处理,成为”惰性求值“,延迟加载。
* */
//limit
students.stream().filter(x->x.getAge>15).limit(10).foreach(System.out::println);
//skip
students.stream().filter(x->x.getAge>15).skip(10).foreach(System.out::println);
//distinct
tudents.stream().filter(x->x.getAge>15).skip(10).distinct().foreach(System.out::println);
/*
*
* 映射
* Map --接受lambda,将元素转换成其他形式或提取信息。接受一个函数作为参数,该函数会被应用到每个元素上,应将其映射成一个新的元素
* */
students.stream().map(Student::getName)
.skip(2)
.distinct()
.forEach(System.out::println);
List<String> strs = Arrays.asList("asd", "adsa", "ssss", "dddd");
strs.stream().map(String::toUpperCase).forEach(System.out::println);
/*
* 排序
*sorted()--自然排序
* sorted(comparator com)--定制排序
*/
List<String> strs = Arrays.asList("aaa", "zzzz", "eeee", "hhhhh", "bbbbb");
strs.stream().sorted().forEach(System.out::println);
System.out.println("------------------------------------------------");
students.stream()
.distinct()
.sorted((x,y)-> {
//如果不知道传几个参数可以查看抽象接口
if (x.getAge().equals(y.getAge())) {
return -x.getName().compareTo(y.getName());
}else
return x.getName().compareTo(y.getName());
}).forEach(System.out::println);