做爲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在實際開發中的一些應用技巧,記錄在這裏,之後有須要的時候能夠及時查閱
我的公衆號<橙耘自留地>日前已經開通,後續博主發佈的文章都會一併更新到公衆號,若有須要,自行查閱.
關於橙耘自留地,是我我的聚焦互聯網技術棧學習分享的一個平臺,創立之初是由於目前業內各類技術課程資料層次不齊,褒貶不一,有時候一門課花費高價買入,其實內含草包,有時偶爾低價得之,卻又大有乾貨.所以我會根據你們的意見和評價,選擇不一樣的技術棧去學習,一爲提高我本身的技術,二爲你們梳理出質量比較好的課程,以做參考.同時,相關的學習心得也會一併更新到博客和公衆號.