概述
另外补充一些Java8骚操作
BigDecimal求和
博客中位置:3.2 归约:reduce(其实已经有了int类型的求和,我写个这个类型的吧)
List bigDecimalList = new ArrayList<>();
bigDecimalList.add(BigDecimal.valueOf(0.05));bigDecimalList.add(BigDecimal.valueOf(0.05));
System.out.println(bigDecimalList.stream().reduce(BigDecimal.ZERO,BigDecimal::add));
结果:0.10
另外提一点,
System.out.println(new BigDecimal(0.05));
结果:0.05000000000000000277555756156289135105907917022705078125
这个写法,是直接传入了double类型,输出的是丢失精度的结果,并不是BigDecimal会丢失精度,是double(具体百度)
所以尽量用 BigDecimal.valueOf()
将list映射为map
博客中位置:3.3 收集:toMap文中提到过,但是没有例子,实战中又用的到
借他list一用
//将学生id作为键,学生名称为值
Map collect = students.stream().collect(Collectors.toMap(Student::getId, Student::getName, (k1, k2) ->k1));
//将学生id作为键,学生对象为值
Map studentMap = students.stream().collect(Collectors.toMap(Student::getId, student -> student, (k1, k2) -> k1));
//根据年级分组,封装成map
Map> map=students.stream().collect(Collectors.groupingBy(Student::getGrade);
排序
博客中位置:2.1 过滤:其中提到排序sorted(列子有排序字段类型是int)
//String类型 按照(姓名)自然顺序排序
students = students.stream().sorted((s1,s2)->s1.getName().compareTo(s2.getName())).collect(Collectors.toList());//或者只排序姓名
List stringList =students.stream().map(Student::getName).collect(Collectors.toList());
stringList=stringList.stream().sorted(Comparator.naturalOrder()).collect(Collectors.toList());//按照时间排序(倒叙) 假设学生对象有创建时间这个字段
students = students.stream().sorted(Comparator.comparing(Student::getCreateTime).reversed()).collect(Collectors.toList());
并行流
public void pullSupplier() {
List students = new ArrayList<>();
ForkJoinPool myPool = new ForkJoinPool(30);
myPool.submit(() -> students.parallelStream().forEach(
student -> {
//设置九千万学生国籍(具体的逻辑)
student.setGJ("中国");
}));
}
欢迎补充批评,另外工作中另外遇到我会补充更新
最后
以上就是唠叨唇膏为你收集整理的java coccuren_java8流处理,不生产博客,做个好博客的搬运工的全部内容,希望文章能够帮你解决java coccuren_java8流处理,不生产博客,做个好博客的搬运工所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复