Stream去除重复并求和
2018-02-27 21:27
471 查看
Steam默认提供了distinct()方法和groupbying()去重复,
1.但是distinct()方法只能去除List中重复的对象,不能对根据对象中某个属性相同了去重复。
比如List<Person>,我想去除名字重复的人,然后统计年龄总和。Steam提供的distinct()方法是实现不了的。
2.但是groupbying一般只是分组,如果要实现同时去重并求和,该方法实现不了。
如何实现去除重复并且求和呢?
此处以统计薪资总和为例import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
Person2 p1 = new Person2("张三", new BigDecimal("10.0"));
Person2 p2 = new Person2("王五", new BigDecimal("10.0"));
Person2 p3 = new Person2("张三", new BigDecimal("10.0"));
Person2 p4 = new Person2("李明", new BigDecimal("10.0"));
Person2 p5 = new Person2("李明", new BigDecimal("10.0"));
/**
* 求薪资总和,名字相同的只加一次
*/
List<Person2> pList = new ArrayList<Person2>();
pList.add(p1);
pList.add(p2);
pList.add(p3);
pList.add(p4);
pList.add(p5);
StringBuilder dealBankNumber = new StringBuilder();
BigDecimal sum = pList.stream().filter(v -> {
boolean flag = !dealBankNumber.toString().contains(v.getName());
dealBankNumber.append("_").append(v.getName());
return flag;
}).map(Person2::getSalary).reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println(sum);
}
}
class Person2 {
private String name;// 姓名
private BigDecimal salary;// 工资
public Person2(String name, BigDecimal salary) {
this.salary = salary;
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getSalary() {
return salary;
}
public void setSalary(BigDecimal salary) {
this.salary = salary;
}
}
1.但是distinct()方法只能去除List中重复的对象,不能对根据对象中某个属性相同了去重复。
比如List<Person>,我想去除名字重复的人,然后统计年龄总和。Steam提供的distinct()方法是实现不了的。
2.但是groupbying一般只是分组,如果要实现同时去重并求和,该方法实现不了。
如何实现去除重复并且求和呢?
此处以统计薪资总和为例import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
Person2 p1 = new Person2("张三", new BigDecimal("10.0"));
Person2 p2 = new Person2("王五", new BigDecimal("10.0"));
Person2 p3 = new Person2("张三", new BigDecimal("10.0"));
Person2 p4 = new Person2("李明", new BigDecimal("10.0"));
Person2 p5 = new Person2("李明", new BigDecimal("10.0"));
/**
* 求薪资总和,名字相同的只加一次
*/
List<Person2> pList = new ArrayList<Person2>();
pList.add(p1);
pList.add(p2);
pList.add(p3);
pList.add(p4);
pList.add(p5);
StringBuilder dealBankNumber = new StringBuilder();
BigDecimal sum = pList.stream().filter(v -> {
boolean flag = !dealBankNumber.toString().contains(v.getName());
dealBankNumber.append("_").append(v.getName());
return flag;
}).map(Person2::getSalary).reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println(sum);
}
}
class Person2 {
private String name;// 姓名
private BigDecimal salary;// 工资
public Person2(String name, BigDecimal salary) {
this.salary = salary;
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getSalary() {
return salary;
}
public void setSalary(BigDecimal salary) {
this.salary = salary;
}
}
相关文章推荐
- PHP中二维数组的排序、去除二维数组的重复、对二维数组的某一字段进行求和的方法
- thinkphp文件上传 文件下载 id去除重复
- 去除ArrayList集合中的重复字符串元素
- 去除 DataTable中重复的Row (2)
- 解析mysql中:单表distinct、多表group by查询去除重复记录
- 去除重复
- sql查询去除重复项
- List去除重复
- NSArray去除重复元素的方法
- js去除重复并统计数量方法
- 去除给定字符串中重复的字符串
- sql查询去除重复值语句
- 随机生成30个数字(范围0-30)存到一个数组中,将数组中重复的数字去除,动态创建数组保存剩下的数字
- 去除表中的重复记录,但每个重复的保留一项
- 通过group by和having去除重复
- 去除重复的,并且可以排序
- sql去除重复语句
- 算法 去除数组重复项
- 去除List集合中的重复值(四种好用的方法)
- JavaScript去除数组里重复值的方法