java8新特性:利用Lambda处理List集合
Java 8新增的Lambda表达式,我们可以用简洁高效的代码来处理List。
1、遍历
public static void main(String[] args) {
List<User> userList = Lists.newArrayList();
User user1 = new User(1L, "张三", 24);
User user2 = new User(2L, "李四", 27);
User user3 = new User(3L, "王五", 21);
userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.stream().forEach(user ->{
System.out.println(user.getName());
});
}
运行结果:

2、list转为Map
public static void main(String[] args) {
List<User> userList = Lists.newArrayList();//存放user对象集合
User user1 = new User(1L, "张三", 24);
User user2 = new User(2L, "李四", 27);
User user3 = new User(3L, "王五", 21);
userList.add(user1);
userList.add(user2);
userList.add(user3);
//ID为key,转为Map
Map<Long,User> userMap = userList.stream().collect(Collectors.toMap(User::getId, a -> a,(k1, k2)->k1));
System.out.println(userMap);
}
运行结果:

3、将List分组:List里面的对象元素,以某个属性来分组
public static void main(String[] args) {
List<User> userList = Lists.newArrayList();//存放user对象集合
User user1 = new User(1L, "张三", 24);
User user2 = new User(2L, "李四", 27);
User user3 = new User(3L, "王五", 21);
User user4 = new User(4L, "张三", 22);
User user5 = new User(5L, "李四", 20);
User user6 = new User(6L, "王五", 28);
userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);
userList.add(user5);
userList.add(user6);
//根据name来将userList分组
Map<String, List<User>> groupBy = userList.stream().collect(Collectors.groupingBy(User::getName));
System.out.println(groupBy);
}
运行结果:

4、过滤:从集合中过滤出来符合条件的元素
public static void main(String[] args) {
List<User> userList = Lists.newArrayList();//存放user对象集合
User user1 = new User(1L, "张三", 24);
User user2 = new User(2L, "李四", 27);
User user3 = new User(3L, "王五", 21);
User user4 = new User(4L, "张三", 22);
User user5 = new User(5L, "李四", 20);
User user6 = new User(6L, "王五", 28);
userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);
userList.add(user5);
userList.add(user6);
//取出名字为张三的用户
List<User> filterList = userList.stream().filter(user -> user.getName().equals("张三")).collect(Collectors.toList());
filterList.stream().forEach(user ->{
System.out.println(user.getName());
});
}
运行结果:

5、求和:将集合中的数据按照某个属性求和
public static void main(String[] args) {
List<User> userList = Lists.newArrayList();//存放user对象集合
User user1 = new User(1L, "张三", 24);
User user2 = new User(2L, "李四", 27);
User user3 = new User(3L, "王五", 21);
User user4 = new User(4L, "张三", 22);
User user5 = new User(5L, "李四", 20);
User user6 = new User(6L, "王五", 28);
userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);
userList.add(user5);
userList.add(user6);
//取出名字为张三的用户
int totalAge = userList.stream().mapToInt(User::getAge).sum();
System.out.println("和:" + totalAge);
}
运行结果:

6、从List转为Map,key与value 一 一对应
public static void main(String[] args) {
List<User> userList = Lists.newArrayList();
User user1 = new User(1L, "张三", 24);
User user2 = new User(2L, "李四", 27);
User user3 = new User(3L, "王五", 21);
User user4 = new User(4L, "张三", 22);
User user5 = new User(5L, "李四", 20);
User user6 = new User(6L, "王五", 28);
userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);
userList.add(user5);
userList.add(user6);
Map<Long/*Id*/,User> userMap = userList.stream().collect(Collectors.toMap(User::getId, user -> user));
System.out.println("toMap:" + JSONArray.toJSONString(userMap));
Map<Long/*Id*/,User> userMap = userList.stream().collect(Collectors.toMap(User::getId, user -> user,(k1,k2)->k1)); //去重
System.out.println("toMap:" + JSONArray.toJSONString(userMap));
}
运行结果:

7、在使用forEach过程中 使用return可以达到continue的效果
public static void main(String[] args) {
List<String> testList = Lists.newArrayList("1","2","3","4","5");
testList.forEach(test->{
if (test.equals("2")){
return;
}
System.out.println(test);
});
}
运行结果:

java8新特性:利用Lambda处理List集合的更多相关文章
- java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合
java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合 比如,我有一张表: entity Category.java service CategoryServic ...
- Java8 新特性学习 Lambda表达式 和 Stream 用法案例
Java8 新特性学习 Lambda表达式 和 Stream 用法案例 学习参考文章: https://www.cnblogs.com/coprince/p/8692972.html 1.使用lamb ...
- Java8新特性系列-Lambda
转载自:Java8新特性系列-Lambda – 微爱博客 Lambda Expressions in Java 8 Lambda 表达式是 Java 8 最流行的特性.它们将函数式编程概念引入 Jav ...
- Java8新特性之Lambda表达式
lambda表达式是java8给我们带来的几个重量级新特性之一,借用lambda表达式,可以让我们的java程序设计更加简洁.最近新的项目摒弃了1.6的版本,全面基于java8进行开发,本文是java ...
- 零基础学习java------21---------动态代理,java8新特性(lambda, stream,DateApi)
1. 动态代理 在一个方法前后加内容,最简单直观的方法就是直接在代码上加内容(如数据库中的事务),但这样写不够灵活,并且代码可维护性差,所以就需要引入动态代理 1.1 静态代理实现 在讲动态代理之前, ...
- Java8 新特性之Lambda表达式
1. Lambda 表达式概述 Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递); Lambda 表达式可以写出更简洁,更灵活的代码 ...
- 【Java8新特性】Lambda表达式基础语法,都在这儿了!!
写在前面 前面积极响应读者的需求,写了两篇Java新特性的文章.有小伙伴留言说:感觉Lambda表达式很强大啊!一行代码就能够搞定那么多功能!我想学习下Lambda表达式的语法,可以吗?我的回答是:没 ...
- 【Java8新特性】- Lambda表达式
Java8新特性 - Lambda表达式 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! ...
- java8新特性,使用流遍历集合
在这篇“Java 8新特性教程”系列文章中,我们会深入解释,并通过代码来展示,如何通过流来遍历集合,如何从集合和数组来创建流,以及怎么聚合流的值. 在之前的文章“遍历.过滤.处理集合及使用Lambda ...
- 漫漫人生路-学点Jakarta基础-Java8新特性 Stream/Lambda
背景 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk dat ...
随机推荐
- chrome 插件开发2
登录 | 注册 基础文档 综述 调试 Manifest 文件 代码例子 模式匹配 分类索引 改变浏览器外观 Browser Actions 右键菜单 桌面通知 Omnibox 选项页 覆写特定页 ...
- 驱动开发(8)处理设备I/O控制函数DeviceIoControl
本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan全部,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/d ...
- Nginx 源码安装和调优
常见web架构: LAMP =Linux+Apache+Mysql+PHP LNMP =Linux+Nginx+Mysql+PHP nginx概述: 知道:1 不知道:2 Nginx (&q ...
- 数据库技术_Orcale技术(0002)_5分钟会用存储过程_存储过程实例
基础技术: 样例业务功能: 1.依据传入的类型A_TYPE联合查询PROCEDURE_TEST_A表.PROCEDURE_TEST_A_SUB表中的数据.并显示主要内容. 2.依据传入的类型A_TYP ...
- Android布局文件经验
1.父控件中含有多个子控件时.往往遵循长子优先的原则,即长子假设非常大可能占满父空间.使次子们出局: 2.如果TableLayout有2行,当中一行未设定列间长度比例.而还有一行设定了,则未设定行可能 ...
- [jzoj 6073] 河 解题报告 (DP)
interlinkage: https://jzoj.net/senior/#main/show/6073 description: solution: 考虑一条河$x$被染的效果 显然对于一条河$i ...
- WCF WEB HTTP请求 WCF REST FUL
首先上点概念WCF 很好的支持了 REST 的开发, 而 RESTful 的服务通常是架构层面上的考虑. 因为它天生就具有很好的跨平台跨语言的集成能力,几乎所有的语言和网络平台都支持 HTTP 请求, ...
- RAR 5.50 控制台使用记录
copy from WinRAR用户手册,备忘 用户手册 ~~~~~~~~ RAR 5.50 控制台版本 ~~~~~~~~~~~~~~~~~~~ =-=-=-=-=-=-=-=-=-=-=-=-=- ...
- CI中的超级对象
CI中的超级对象就是当前控制器对象,它提供了很多属性,可以通过var_dump($this)打印所有的超级对象: load可以理解为一个加载器,加载了很多功能,可以理解为当你使用 $this -> ...
- (转)es6用法
如何在浏览器中使用es6的语法呢? 方法一:引入文件相关js文件 <script src="traceur.js"></script> <script ...