通过Lambda表达式对List进行分组查询并统计相关数据参数

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private String name;
private Integer age;
private String className;
private String flag;
public Student(String className, String flag) {
this.className = className;
this.flag = flag;
}
}
public class StudentTest {
public static void main(String[] args) {
Student wangzz2 = new Student("wangzz", 11, "1班", "A");
Student wangzz1 = new Student("wangzz", 10, "1班", "A");
Student wangzz = new Student("wangzz", 10, "1班", "B");
Student wangyt1 = new Student("wangyt", 5, "2班", "C");
Student wangyt = new Student("wangyt", 5, "2班", "C");
List<Student> students = new ArrayList<>(Arrays.asList(wangzz, wangzz1, wangzz2, wangyt, wangyt1));
HashMap<Student, List<Student>> collect = students.stream()
.collect(groupingBy(d -> new Student(d.getClassName(), d.getFlag()),
HashMap::new, toList()
));
System.out.println(collect);
List<Student> resList = new ArrayList<>();
for (Map.Entry<Student, List<Student>> entry : collect.entrySet()) {
List<Student> value = entry.getValue();
if (CollectionUtils.isEmpty(value)) {
continue;
}
Student student = new Student();
// 复制基本属性
BeanUtils.copyProperties(value.get(0), student);
// 设置相关属性eg: age
Integer sumAge = value.stream().map(Student::getAge).reduce(Integer::sum).get();
student.setAge(sumAge);
resList.add(student);
}
resList.forEach(System.out::println);
}
// Student(name=wangzz, age=21, className=1班, flag=A)
// Student(name=wangzz, age=10, className=1班, flag=B)
// Student(name=wangyt, age=10, className=2班, flag=C)
}

参考链接:

  1. https://wenku.baidu.com/view/d41ed95e32b765ce0508763231126edb6f1a7667.html
  2. https://blog.csdn.net/qq_40813329/article/details/120006487
  3. https://deepmind.t-salon.cc/article/4169

posted @   Felix_Openmind  阅读(1666)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
*{cursor: url(https://files-cdn.cnblogs.com/files/morango/fish-cursor.ico),auto;}
点击右上角即可分享
微信分享提示