做为java8新特性之一的Stream API
为开发者带来了极大的便利,它能够对咱们须要操做的集合进行很是复杂的操做,以活的咱们想要的结果.java
本文不会告诉你什么是Stream,毕竟网上花里胡哨的使用教程已经让我目不暇接,本系列博文只是记录一些Stream
的使用技巧,便于方便的查找和参考.api
本博文会无限更新,有新的使用方法会逐渐添加进来,若是有小伙伴有新奇的使用技巧,也能够发出来一块儿分享.学习
本文中默认使用的对象user以下:this
@Data class User { /** 名字 **/ private String name; /** 年龄 **/ private Integer age; /** 性别 true男false女 **/ private boolean sex; User(String name, Integer age, boolean sex) { this.age = age; this.name = name; this.sex = sex; } }
需求描述:code
有一个List集合,其中的每个元素都是对象,想变成一个Map,其中key是对象的一个属性,value也是对象的一个属性或者对象自己.对象
伪代码:教程
@Test public void test1() { User a = new User("张三", 20, true); User b = new User("李四", 30, true); User c = new User("王五", 40, true); List<User> list = new ArrayList<User>(); list.add(a); list.add(b); list.add(c); //变成Map, key是name, value是age Map<String, Integer> collect = list.stream().collect(Collectors.toMap(User::getName, User::getAge)); System.out.println(collect); }
结果:开发
{李四=30, 张三=20, 王五=40}
需求描述:get
List
伪代码:
@Test public void test1() { User a = new User("张三", 20, true); User b = new User("李四", 30, true); User c = new User("王五", 40, true); List<User> list = new ArrayList<User>(); list.add(a); list.add(b); list.add(c); //取出每个user的name变成list List<String> collect = list.stream().map(User::getName).collect(Collectors.toList()); System.out.println(collect); }
结果:
[张三, 李四, 王五]
需求描述
用户集合中的用户,先按照年龄分组,再按照姓名分组,最终将用户分开
伪代码:
@Test public void test1() { User a = new User("张三", 20, true); User b = new User("李四", 30, true); User c = new User("王五", 40, true); User d = new User("花木兰", 40, false); User e = new User("李师师", 50, false); List<User> list = new ArrayList<User>(); list.add(a); list.add(b); list.add(c); list.add(d); list.add(e); //取出每个user的name变成list Map<Integer, Map<String, User>> collect = list.stream().collect(Collectors.groupingBy( User::getAge, Collectors.toMap(User::getName, x -> x)) ); System.out.println(collect); }
结果:
{50={李师师=SampleStream.User(name=李师师, age=50, sex=false)}, 20={张三=SampleStream.User(name=张三, age=20, sex=true)}, 40={王五=SampleStream.User(name=王五, age=40, sex=true), 花木兰=SampleStream.User(name=花木兰, age=40, sex=false)}, 30={李四=SampleStream.User(name=李四, age=30, sex=true)}}
在本篇博文中,列举了java8中Stream API在实际开发中的一些应用技巧,记录在这里,之后有须要的时候能够及时查阅
我的公众号<橙耘自留地>日前已经开通,后续博主发布的文章都会一并更新到公众号,若有须要,自行查阅.
关于橙耘自留地,是我我的聚焦互联网技术栈学习分享的一个平台,创立之初是由于目前业内各类技术课程资料层次不齐,褒贬不一,有时候一门课花费高价买入,其实内含草包,有时偶尔低价得之,却又大有干货.所以我会根据你们的意见和评价,选择不一样的技术栈去学习,一为提高我本身的技术,二为你们梳理出质量比较好的课程,以做参考.同时,相关的学习心得也会一并更新到博客和公众号.