public class Student {
private String name;//姓名
private Integer age;//年龄
private int sex;//性别
private String professional;//专业
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public String getProfessional() {
return professional;
}
public void setProfessional(String professional) {
this.professional = professional;
}
public Student(String name, Integer age, int sex, String professional) {
super();
this.name = name;
this.age = age;
this.sex = sex;
this.professional = professional;
}
}
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.stream.Collectors;
public class GroupByMain {
public static void main(String[] args) {
List<Student> allList = new ArrayList<Student>();
Student st1 = new Student("小王",26,1,"计算机");
allList.add(st1);
Student st2 = new Student("小张",21,1,"电气");
allList.add(st2);
Student st3 = new Student("小红",22,1,"人文");
allList.add(st3);
Student st4 = new Student("小李",23,1,"计算机");
allList.add(st4);
// 以专业分组
Map<String, List<Student>> MapStudent = allList.stream().collect(
Collectors.groupingBy(Student::getProfessional));
// 遍历获取对象信息
for (Map.Entry<String, List<Student>> entry: MapStudent.entrySet()) {
List<Student> student = entry.getValue();
System.out.println(student.toString());
}
System.out.println("------------分割线---------------");
// 以专业分组,并选取年龄最大的 学生
Map<String, Optional<Student>> MapStudent1 = allList.stream().collect(
Collectors.groupingBy(Student::getProfessional, Collectors.maxBy((o1, o2) -> o1.getAge().compareTo(o2.getAge()))));
// 遍历获取对象信息
for (Entry<String, Optional<Student>> entry: MapStudent1.entrySet()) {
Student student = entry.getValue().get();
System.out.println(student.getName().toString());
}
}
}
