概述
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Test {
public static void main(String[] args) {
Student s1 = new Student("张三", new BigDecimal("28.3"));
Student s2 = new Student("张三", new BigDecimal("25.6"));
Student s3 = new Student("李四", new BigDecimal("27.8"));
List<Student> list = Arrays.asList(s1, s2, s3);
BigDecimal add = list.stream().map(Student::getnum).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2,BigDecimal.ROUND_HALF_UP);
System.out.println(add);
list.stream().collect(Collectors.groupingBy(Student::getName)).forEach( (k,v) ->{
v.stream().forEach(a -> {
a.setRate(a.getnum().divide(add,4,BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString());
});
});
System.out.println(list);
}
}
class Student{
private String name;
private BigDecimal num;
private String rate;
public Student() {
}
public Student(String name, BigDecimal num) {
this.name = name;
this.num = num;
}
public String getName() {
return name;
}
public BigDecimal getnum() {
return num;
}
public String getRate() {
return rate;
}
public void setName(String name) {
this.name = name;
}
public void setnum(BigDecimal num) {
this.num = num;
}
public void setRate(String rate) {
this.rate = rate;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + ''' +
", num=" + num +
", rate='" + rate + ''' +
'}';
}
}
BigDecimal在创建的时候最好不要用double,数据会存在精度问题,如果要使用小数类型的数据,可以直接使用String。
reduce内部提供了大量的API,包括加减乘除,最大最小值等,不过reduce只针对于BigDecimal。
groupingBy类似于SQL里面的group by,对集合进行分组,key根据自己的需求进行改动,val就是group by之后的集合。
最后
以上就是笑点低酒窝为你收集整理的函数式编程reduce与groupingBy的常见使用的全部内容,希望文章能够帮你解决函数式编程reduce与groupingBy的常见使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复