Java8之stream()分组

本文介绍了一种使用Java进行学生信息管理的方法,通过Stream API实现学生信息按专业分组,并从中挑选出各专业年龄最大的学生。示例代码展示了如何创建学生类,设置属性,以及如何使用groupingBy和maxBy收集器进行数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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());
	        }
	
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值