java8利⽤流和lambda表达式对list遍历处理
java8的lambda表达式提供了⼀些⽅便list操作的⽅法,主要涵盖分组、过滤、求和、最值、排序、去重。
优点: (1) 简洁,跟之前的传统写法对⽐,能少写不少代码;
   (2) 易并⾏计算。尤其适⽤于遍历结果,循环计算数值或者赋值的时候⾮常⽅便。
缺点:(1) debug调试不⽅便;
   (2) 在⾮并⾏时,效率并没有提⾼(未测试)
使⽤总结
1.forEach()
  list.forEach(item->{
sortedlist    //执⾏逻辑
    //item.setName("测试");
    //Name();
  });
2.stream()流操作
  2.1 去重关键字:distinct
    list = list.stream().distinct().List());
  2.2 排序根据对象的某个属性排序关键字:sorted
    list = list.stream().sorted(((o1, o2) -> o2.getId()-o1.getId())).List());
    简化版:  list.sort(((o1, o2) -> {Id()-o1.getId();}));
      多字段排序:  list.sort(Comparatorparing(User::getId).thenComparing(User::getAge));
    说明: o2.getId()-o1.getId()的o2和o1的顺序决定升序或是降序
  2.3 过滤根据对象的某个属性过滤关键字:filter
    list = list.stream().filter(item-&Id()>5).List());
  2.4 提取取出对象的某个属性的集合关键字:map
    List<Integer> idList = list.stream().map(user-> Id()).List());
    List<Integer> idList = list.stream().map(User::getId).List());
    说明:提取有两种写法 ,第⼀种是Function表达式,可以加⾃⼰的判断
  2.5 统计获取对象某个属性的平均值最⼤最⼩值登等关键字: mapToDouble() mapToInt()  mapToLong()    average max min sum
    num = list.stream().mapToInt(item -> Id()).average();
    num = list.stream().mapToInt(item -> Id()).max();
    num = list.stream().mapToInt(item -> Id()).min();
    ⼤数据计算:  BigDecimal num= list.stream().map(User::getNum).reduce(BigDecimal.ZERO, BigDecimal::add);  说明: 需要注意null 的情况,需要先过滤,或者重写⽅法
    若要获取最值对应的对象:
      Comparator<User> comparator = Comparatorparing(item -> Id);
      User user = list.stream().max(comparator).get();
  2.6 分组根据对象的某个属性分组关键字:upingBy
    list.stream().upingBy(item -> Id()));
    说明: 还可以多重分组或者是多字段分组或者是统计分组后的某个属性的最⼤最⼩值等关键字:Collectors.summarizingInt   2.7 转map
    Map map = list.stream().Map(item -> Id(),a -> a,(k1,k2)->k1));
  说明:当key重复时会报错,所以需要加上 (k1,k2)->k1),表⽰有重复时,取k1的值

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。