Stream去除重复并求和

偏执的太偏执、 2022-05-29 23:05 564阅读 0赞

Steam默认提供了distinct()方法和groupbying()去重复,

1.但是distinct()方法只能去除List中重复的对象,不能对根据对象中某个属性相同了去重复。

比如List,我想去除名字重复的人,然后统计年龄总和。Steam提供的distinct()方法是实现不了的。

2.但是groupbying一般只是分组,如果要实现同时去重并求和,该方法实现不了。

如何实现去除重复并且求和呢?

此处以统计薪资总和为例

  1. import java.math.BigDecimal;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class Test {
  5. public static void main(String[] args) {
  6. Person2 p1 = new Person2("张三", new BigDecimal("10.0"));
  7. Person2 p2 = new Person2("王五", new BigDecimal("10.0"));
  8. Person2 p3 = new Person2("张三", new BigDecimal("10.0"));
  9. Person2 p4 = new Person2("李明", new BigDecimal("10.0"));
  10. Person2 p5 = new Person2("李明", new BigDecimal("10.0"));
  11. /**
  12. * 求薪资总和,名字相同的只加一次
  13. */
  14. List<Person2> pList = new ArrayList<Person2>();
  15. pList.add(p1);
  16. pList.add(p2);
  17. pList.add(p3);
  18. pList.add(p4);
  19. pList.add(p5);
  20. StringBuilder dealBankNumber = new StringBuilder();
  21. BigDecimal sum = pList.stream().filter(v -> {
  22. boolean flag = !dealBankNumber.toString().contains(v.getName());
  23. dealBankNumber.append("_").append(v.getName());
  24. return flag;
  25. }).map(Person2::getSalary).reduce(BigDecimal.ZERO, BigDecimal::add);
  26. System.out.println(sum);
  27. }
  28. }
  29. class Person2 {
  30. private String name;// 姓名
  31. private BigDecimal salary;// 工资
  32. public Person2(String name, BigDecimal salary) {
  33. this.salary = salary;
  34. this.name = name;
  35. }
  36. public String getName() {
  37. return name;
  38. }
  39. public void setName(String name) {
  40. this.name = name;
  41. }
  42. public BigDecimal getSalary() {
  43. return salary;
  44. }
  45. public void setSalary(BigDecimal salary) {
  46. this.salary = salary;
  47. }
  48. }

发表评论

表情:
评论列表 (有 0 条评论,564人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Stream流,求和计算

    简介:     Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作。通常我们需要多行代码

    相关 mysql去除重复数据

    mysql去除重复数据 在crm中,电话号码就往往就代表了一个客户,所以往往电话号码不能出现重复数据,下面就根据客户表client的phone字段去除重复数据: