java8的lambda表达式提供了一些方便list操作的方法,主要涵盖分组、过滤、求和、最值、排序、去重。

优点: (1) 简洁,跟之前的传统写法对比,能少写不少代码;

   (2) 易并行计算。尤其适用于遍历结果,循环计算数值或者赋值的时候非常方便。

缺点:(1) debug调试不方便;

   (2) 在非并行时,效率并没有提高(未测试)

使用总结

1.forEach()

  list.forEach(item->{

    //执行逻辑

    //item.setName("测试");

    //item.getName();

  });

2.stream()流操作

  2.1 去重 关键字:distinct

    list = list.stream().distinct().collect(Collectors.toList());

  2.2 排序 根据对象的某个属性排序 关键字:sorted

    list = list.stream().sorted(((o1, o2) -> o2.getId()-o1.getId())).collect(Collectors.toList());

    简化版:  list.sort(((o1, o2) -> {return o2.getId()-o1.getId();}));

      多字段排序:  list.sort(Comparator.comparing(User::getId).thenComparing(User::getAge));

    说明: o2.getId()-o1.getId()的o2和o1的顺序决定升序或是降序

  2.3 过滤 根据对象的某个属性过滤 关键字:filter

    list = list.stream().filter(item->item.getId()>5).collect(Collectors.toList());

  2.4 提取 取出对象的某个属性的集合 关键字:map

    List<Integer> idList = list.stream().map(user-> user.getId()).collect(Collectors.toList());

    List<Integer> idList = list.stream().map(User::getId).collect(Collectors.toList());

    说明:提取有两种写法 ,第一种是Function表达式,可以加自己的判断

  2.5 统计 获取对象某个属性的平均值 最大最小值登等 关键字: mapToDouble() mapToInt()  mapToLong()    average max min sum

    num = list.stream().mapToInt(item -> item.getId()).average();

    num = list.stream().mapToInt(item -> item.getId()).max();

    num = list.stream().mapToInt(item -> item.getId()).min();

    大数据计算:  BigDecimal num= list.stream().map(User::getNum).reduce(BigDecimal.ZERO, BigDecimal::add);  说明: 需要注意null的情况,需要先过滤,或者重写方法

    若要获取最值对应的对象:

      Comparator<User> comparator = Comparator.comparing(item -> item.getId);

      User user = list.stream().max(comparator).get();

  2.6 分组 根据对象的某个属性分组  关键字:Collectors.groupingBy

    list.stream().collect(Collectors.groupingBy(item -> item.getId()));

    说明: 还可以多重分组或者是多字段分组或者是统计分组后的某个属性的最大最小值等 关键字:Collectors.summarizingInt

  2.7 转map

    Map map = list.stream().collect(Collectors.toMap(item -> item.getId(),a -> a,(k1,k2)->k1));

  说明:当key重复时会报错,所以需要加上 (k1,k2)->k1),表示有重复时,取k1的值

java8利用流和lambda表达式对list遍历处理的更多相关文章

  1. Java8新特性 1——利用流和Lambda表达式操作集合

    Java8中可以用简洁的代码来操作集合,比如List,Map,他们的实现ArrayList.以此来实现Java8的充分利用CPU的目标. 流和Lambda表达式都是Java8中的新特性.流可以实现对集 ...

  2. Java8新特性 利用流和Lambda表达式对List集合进行处理

    Lambda表达式处理List 最近在做项目的过程中经常会接触到 lambda 表达式,随后发现它基本上可以替代所有 for 循环,包括增强for循环.也就是我认为,绝大部分的for循环都可以用 la ...

  3. java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合

    java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合 比如,我有一张表: entity Category.java service CategoryServic ...

  4. Java8 新特性学习 Lambda表达式 和 Stream 用法案例

    Java8 新特性学习 Lambda表达式 和 Stream 用法案例 学习参考文章: https://www.cnblogs.com/coprince/p/8692972.html 1.使用lamb ...

  5. 夯实Java基础(二十二)——Java8新特性之Lambda表达式

    1.前言 Java 8于14年发布到现在已经有5年时间了,经过时间的磨练,毫无疑问,Java 8是继Java 5(发布于2004年)之后的又一个非常最重要的版本.因为Java 8里面出现了非常多新的特 ...

  6. 【Java8新特性】你知道Java8为什么要引入Lambda表达式吗?

    写在前面 这是一道真实的面试题,一个读者朋友出去面试,面试官竟然问他这样一个问题:你说说Java8中为什么引入Lambda表达式?引入Lambda表达式后有哪些好处呢?还好这个朋友对Java8早有准备 ...

  7. 【Java8新特性】- Lambda表达式

    Java8新特性 - Lambda表达式 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! ...

  8. 再来看看Java8的新特征——lambda表达式

    什么是lambda表达式? 可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表.函数主体.返回类型,可能还有一个可以抛出的异常列表. 比如说new一个Thr ...

  9. Java8新特性之Lambda表达式

    lambda表达式是java8给我们带来的几个重量级新特性之一,借用lambda表达式,可以让我们的java程序设计更加简洁.最近新的项目摒弃了1.6的版本,全面基于java8进行开发,本文是java ...

  10. Java8特性详解 lambda表达式 Stream

    1.lambda表达式 Java8最值得学习的特性就是Lambda表达式和Stream API,如果有python或者javascript的语言基础,对理解Lambda表达式有很大帮助,因为Java正 ...

随机推荐

  1. antd timePicker组件限制当前之前的时间不可选择

    import React from 'react'; import ReactDOM from 'react-dom'; import {Input,DatePicker,Form,Col,Butto ...

  2. Something Just Like This

    I've been reading books of old我遍读旧籍 The legends and the myths那些古老传奇和无边神秘 Achilles and his gold如阿喀琉斯和 ...

  3. Feign熔断

    在Feign中使用 @EnableFeignClients中已经默认打开了断路器功能,所以这里的启动类上不需要再加@EnableCircuitBreaker注解 只需要在@FeignClient中为f ...

  4. Windows 进程间通信 共享内存

    向内存中写数据 1 // SharedMemorySample_write_main.cpp 2 #include <SDKDDKVer.h> 3 #include <Windows ...

  5. 2N2218仿真估算静态工作点

    (在找到的2N2218技术手册中没有发现输入输出特性曲线,只能自己估算了) 共射极直流通路电路 #静态工作点表达式 #IBQ = (Vcc - UBEQ)/RB #ICQ = (Vcc - UCEQ) ...

  6. Absolute Path Traversal 错误解决

    Absolute Path Traversal (APT) 是一种常见的安全漏洞,攻击者可以通过该漏洞访问应用程序的文件系统中的文件, 包括敏感信息,从而可能导致应用程序遭受攻击. 一.使用专门的文件 ...

  7. Linux挂载tf卡空间

    https://blog.csdn.net/cao849861802/article/details/126039190

  8. Jetpack compose初尝试

    2021/07/29 Jetpack compose1.0正式发布,已经可以在生产环境中使用了. 下面的内容为根据官方教程尝试的总结,上手没难度,而且也不需要配置什么环境. Android 开发者   ...

  9. github秒变vscode

    方法一:github.sth -> github1s.sth 方法二:github保持登录状态,然后是英文输入法,点击'.'就行

  10. Element UI 父组件el-tabel选择某行跳转子组件,在子组件的el-table中选择数组,添加到父组件操作行中

    解决思路: 1.在父组件选择操作某行数据时,将父组件的行号暂存(index). 2.跳转子组件页面,选择某行数据,点击提交将该行数据传递个父组件 3.父组件取到第一步暂存行号(index),将子组件传 ...