import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Lambda {
public static void main(String[] args){
List<Student> studentList = new ArrayList<Student>();
Student s1 = new Student("zhang",20,1,3,90);
Student s2 = new Student("li",23,1,0,91);
Student s3 = new Student("guo",16,1,0,99);
Student s4 = new Student("wu",18,3,0,94);
Student s5 = new Student("liu",28,3,0,95);
Student s6 = new Student("yu",22,2,0,93);
Student s7 = new Student("ren",24,2,1,93);
Student s8 = new Student("guo",15,2,2,99);
studentList.add(s1);
studentList.add(s2);
studentList.add(s3);
studentList.add(s4);
studentList.add(s5);
studentList.add(s6);
studentList.add(s7);
studentList.add(s8);
//1.遍历循环
studentList.forEach(student -> System.out.println(student));
System.out.println("---------------------------------------------------------------------------");
//结果
/**
* Student{name='zhang', age=20, classroom=1, sort=3, grade=90}
* Student{name='li', age=23, classroom=1, sort=0, grade=91}
* Student{name='guo', age=16, classroom=1, sort=0, grade=99}
* Student{name='wu', age=18, classroom=3, sort=0, grade=94}
* Student{name='liu', age=28, classroom=3, sort=0, grade=95}
* Student{name='yu', age=22, classroom=2, sort=0, grade=93}
* Student{name='ren', age=24, classroom=2, sort=1, grade=93}
* Student{name='guo', age=15, classroom=2, sort=2, grade=99}
*/
//2.判断条件(如果箭头函数前后只有一行代码时,可以简写)
List<Student> students = studentList.stream().filter((student) -> {
return student.getClassroom() == 1;
}).collect(Collectors.toList());
students.forEach(student -> System.out.println(student));
System.out.println("---------------------------------------------------------------------------");
/**
* Student{name='zhang', age=20, classroom=1, sort=3, grade=90}
* Student{name='li', age=23, classroom=1, sort=0, grade=91}
* Student{name='guo', age=16, classroom=1, sort=0, grade=99}
*/
List<Student> collect = studentList.stream().filter(student -> student.getClassroom() == 2).collect(Collectors.toList());
collect.forEach(student -> System.out.println(student));
System.out.println("---------------------------------------------------------------------------");
/**
* Student{name='yu', age=22, classroom=2, sort=0, grade=93}
* Student{name='ren', age=24, classroom=2, sort=1, grade=93}
* Student{name='guo', age=15, classroom=2, sort=2, grade=99}
*/
//3.使用map获取其中某一属性
studentList.stream().map(student -> student.getClassroom()).forEach(System.out::println);
/**结果
* 1
* 1
* 1
* 3
* 3
* 2
* 2
* 2
*/
//4.进行排序方法一
System.out.println("--------------------------------使用减法排序班级-------------------------------------------");
studentList.stream().sorted((student1,student2)->{
return student1.getClassroom()-student2.getClassroom();
}).forEach(System.out::println);
/**
* Student{name='zhang', age=20, classroom=1, sort=3, grade=90}
* Student{name='li', age=23, classroom=1, sort=0, grade=91}
* Student{name='guo', age=16, classroom=1, sort=0, grade=99}
* Student{name='yu', age=22, classroom=2, sort=0, grade=93}
* Student{name='ren', age=24, classroom=2, sort=1, grade=93}
* Student{name='guo', age=15, classroom=2, sort=2, grade=99}
* Student{name='wu', age=18, classroom=3, sort=0, grade=94}
* Student{name='liu', age=28, classroom=3, sort=0, grade=95}
*/
//compareTo排序
System.out.println("--------------------------------按照班级的排序compareTo------------------------------------------");
studentList.stream().sorted(
(stdent1,student2)->stdent1.getClassroom().compareTo(student2.getClassroom())
).forEach(System.out::println);
/**
* Student{name='zhang', age=20, classroom=1, sort=3, grade=90}
* Student{name='li', age=23, classroom=1, sort=0, grade=91}
* Student{name='guo', age=16, classroom=1, sort=0, grade=99}
* Student{name='yu', age=22, classroom=2, sort=0, grade=93}
* Student{name='ren', age=24, classroom=2, sort=1, grade=93}
* Student{name='guo', age=15, classroom=2, sort=2, grade=99}
* Student{name='wu', age=18, classroom=3, sort=0, grade=94}
* Student{name='liu', age=28, classroom=3, sort=0, grade=95}
*/
System.out.println("-------------------------------------按照sort进行的排序compareTo-------------------------------------");
studentList.stream().sorted((student1,student2)->student1.getSort().compareTo(student2.getSort())).forEach(System.out::println);
/**结果
* Student{name='li', age=23, classroom=1, sort=0, grade=91}
* Student{name='guo', age=16, classroom=1, sort=0, grade=99}
* Student{name='wu', age=18, classroom=3, sort=0, grade=94}
* Student{name='liu', age=28, classroom=3, sort=0, grade=95}
* Student{name='yu', age=22, classroom=2, sort=0, grade=93}
* Student{name='ren', age=24, classroom=2, sort=1, grade=93}
* Student{name='guo', age=15, classroom=2, sort=2, grade=99}
* Student{name='zhang', age=20, classroom=1, sort=3, grade=90}
*/
}
}