【求集合中“相同元素”某个属性的和】

【求集合中“相同元素”某个属性的和】

注意:我这里“相同元素”指的是“某个字段相同”,而不是整个对象相同

  • 建议先运行一遍程序,然后再看
public static void main(String[] args)  {

	// 测试数据
   List<TpeSchemeCourseClassDto> courseClassList = new ArrayList<>();
   courseClassList.add(new TpeSchemeCourseClassDto().setFClassNum("1").setFCourseNum("001").setFDistCount(23));
   courseClassList.add(new TpeSchemeCourseClassDto().setFClassNum("2").setFCourseNum("001").setFDistCount(52));
   courseClassList.add(new TpeSchemeCourseClassDto().setFClassNum("3").setFCourseNum("001").setFDistCount(42));

   courseClassList.add(new TpeSchemeCourseClassDto().setFClassNum("1").setFCourseNum("002").setFDistCount(34));
   courseClassList.add(new TpeSchemeCourseClassDto().setFClassNum("2").setFCourseNum("002").setFDistCount(52));
   courseClassList.add(new TpeSchemeCourseClassDto().setFClassNum("3").setFCourseNum("002").setFDistCount(44));

   courseClassList.add(new TpeSchemeCourseClassDto().setFClassNum("1").setFCourseNum("003").setFDistCount(24));
   courseClassList.add(new TpeSchemeCourseClassDto().setFClassNum("2").setFCourseNum("003").setFDistCount(53));
   courseClassList.add(new TpeSchemeCourseClassDto().setFClassNum("3").setFCourseNum("003").setFDistCount(42));

	// 1. 先按照相同字段(班级编码)进行分组
   Map<String, List<TpeSchemeCourseClassDto>> collect = courseClassList.stream().collect(Collectors.groupingBy(TpeSchemeCourseClassDto::getFClassNum));

	// 2. 遍历这个 Map
   for (String key : collect.keySet()) {
   
       List<TpeSchemeCourseClassDto> courseClassDtos = collect.get(key);

		// 3. 求 fDistCount 该属性的和
       long sum = courseClassDtos.stream().mapToInt(TpeSchemeCourseClassDto::getFDistCount).summaryStatistics().getSum();
       System.out.println(key + " ===== " + sum);
   }

   /*
   	结果
       1 ===== 81
       2 ===== 157
       3 ===== 128
    */

}

/**
 * 实体类
 */
@Data
@Accessors(chain = true)
public static class TpeSchemeCourseClassDto {

    /** 班级编码 */
    private String fClassNum;

    /** 课程编码 */
    private String fCourseNum;

    /** 当前课程分配人数 */
    private Integer fDistCount;

    /** 课程名称 */
    private String courseName;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值