关于JDK8中stream的用法小总结。
import java.io.Serializable; import java.util.*; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Student> studentList = new ArrayList<>(); studentList.add(new Student(1,2,1000,88)); studentList.add(new Student(2,2,1000,76)); studentList.add(new Student(3,1,2000,79)); studentList.add(new Student(4,2,3000,88)); studentList.add(new Student(5,2,3000,49)); studentList.add(new Student(5,1,4000,69)); studentList.add(new Student(5,1,4000,96)); // 按照班级分组,性别为女,分数降序 Map<String, List<Student>> groupList = new HashMap<String, List<Student>>(); studentList.stream().filter(student -> student.getSex() == 2 ).collect(Collectors.groupingBy(Student::getClassNo, Collectors.toList())).forEach( (classNo, listByClassNo) -> { groupList.put(classNo + "", listByClassNo.stream().sorted(Comparator.comparing(Student::getScore).reversed()).collect(Collectors.toList())); } ); System.out.println("Hello World!"); } private static class Student implements Serializable { private int id; private int sex; private int classNo; private int score; public Student(int id, int sex, int classNo, int score) { this.id = id; this.sex = sex; this.classNo = classNo; this.score = score; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } public int getClassNo() { return classNo; } public void setClassNo(int classNo) { this.classNo = classNo; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } } }