国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java8 Stream流的合并

Java8 Stream流的合并

2023-05-08 01:03未知服務器之家 Java教程

最近的需求里有這樣一個場景,要校驗一個集合中每個對象的多個Id的有效性。比如一個Customer對象,有3個Id: id1 , id2 , id3 ,要把這些Id全部取出來,然后去數據庫里查詢它是否存在。 @Data@AllArgsConstructorpublic class Customer { priva

最近的需求里有這樣一個場景,要校驗一個集合中每個對象的多個Id的有效性。比如一個Customer對象,有3個Id:id1id2,id3,要把這些Id全部取出來,然后去數據庫里查詢它是否存在。

@Data
@AllArgsConstructor
public class Customer {
    private String name;
    private String id1;
    private String id2;
    private String id3;
}

在通常情況下,我們要從集合中取出一個對象屬性,很好辦,用這個辦法:

customerList.stream().map(Customer::getId1).filter(Objects::nonNull).collect(Collectors.toList())

現在要取3個字段,怎么做呢?

Stream.concat

Stream接口中的靜態方法concat,可以把兩個流合成一個,我們取3個字段可以合并兩次:

Stream<String> concat = Stream.concat(customerList.stream().map(Customer::getId1),
		customerList.stream().map(Customer::getId2));
List<String> ids = Stream.concat(concat, customerList.stream().map(Customer::getId3))
        .filter(Objects::nonNull)
        .collect(Collectors.toList());

取4個字段,就再繼續合并。但是這種不夠簡潔,可以使用扁平化流flatMap。

flatMap

flatmap方法讓你把一個流中的每個值都換成另一個流,然后把所有的流連接起來成為一個流。

Stream.flatMap方法的入參為一個Function函數,函數返回值的泛型要求為Stream類型。對比一下,mapflatMap都是將流中的元素映射為我們想要的值,只是flatMap映射的結果是一個新的Stream。

Stream.of方法剛好可以構建一個類型為Stream的原始流,以供flatMap操作。

List<String> ids = Stream.of(customerList.stream().map(Customer::getId1),
                             customerList.stream().map(Customer::getId2),
                             customerList.stream().map(Customer::getId3))
        .flatMap(idStream -> idStream)
        .filter(Objects::nonNull)
        .collect(Collectors.toList());

注意,Stream.of方法返回的流的泛型跟方法入參的類型是一樣,上面的代碼就相當于,Stream.of(stream, stream, stream), 得到的結果就是Stream<Stream>,緊接著用flatMap扁平化處理,把每一個元素合成一個新流。

延伸 · 閱讀

精彩推薦
  • Java教程java基于TCP協議實現聊天程序

    java基于TCP協議實現聊天程序

    這篇文章主要為大家詳細介紹了java基于TCP協議實現聊天程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    熱血小碼哥6292021-05-19
  • Java教程Java 實現一個漢諾塔實戰練習

    Java 實現一個漢諾塔實戰練習

    漢諾塔是源于印度一個古老傳說的益智玩具。大梵天創造世界時做了三根石柱,在一根柱子上從下往上按大小順序摞著64片黃金圓盤。大梵天命令婆羅門把...

    Dark And Grey6122022-02-28
  • Java教程java實現京東登陸示例分享

    java實現京東登陸示例分享

    這篇文章主要介紹了使用java實現的京東商城登陸示例,需要的朋友可以參考下 ...

    java教程網5692019-11-12
  • Java教程Hadoop多Job并行處理的實例詳解

    Hadoop多Job并行處理的實例詳解

    這篇文章主要介紹了Hadoop多Job并行處理的實例詳解的相關資料,希望通過本文能幫助到大家,需要的朋友可以參考下...

    回首凡塵不做仙5732021-01-21
  • Java教程Java基于jdbc連接mysql數據庫操作示例

    Java基于jdbc連接mysql數據庫操作示例

    這篇文章主要介紹了Java基于jdbc連接mysql數據庫操作,結合完整實例形式分析了java使用jdbc連接mysql數據庫的具體步驟與相關注意事項,需要的朋友可以參考下...

    lifan55072020-12-07
  • Java教程java操作mysql實現增刪改查的方法

    java操作mysql實現增刪改查的方法

    這篇文章主要介紹了java操作mysql實現增刪改查的方法,結合實例形式分析了java操作mysql數據庫進行增刪改查的具體實現技巧與相關注意事項,需要的朋友可以...

    Flying_tao3972020-09-22
  • Java教程Java編程實現統計一個字符串中各個字符出現次數的方法

    Java編程實現統計一個字符串中各個字符出現次數的方法

    這篇文章主要介紹了Java編程實現統計一個字符串中各個字符出現次數的方法,涉及java針對字符串的遍歷、判斷、運算等相關操作技巧,需要的朋友可以參考下...

    移動小狂人-趙子龍6172021-03-06
  • Java教程SpringMVC的REST風格的四種請求方式總結

    SpringMVC的REST風格的四種請求方式總結

    下面小編就為大家帶來一篇SpringMVC的REST風格的四種請求方式總結。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    AltErNatiVe6912020-12-22
主站蜘蛛池模板: 久久国内精品 | 国产综合精品一区二区三区 | 龙珠z国语291集普通话 | 岛国av免费 | 久日av | av在线日韩 | 精品久久久久久久久久久 | 欧美性久久| 国产精品久久一区二区三区 | 亚洲精品一区在线观看 | 在线播放亚洲 | 欧美视频二区 | 国产精品久久久久久久久久久免费看 | 国产免费一区二区 | 国产色秀视频在线观看 | 精品久久一二三区 | 精品成人在线 | 97久久超碰 | 久草中文在线观看 | 密桃在线视频 | 91久久综合亚洲鲁鲁五月天 | 久久久久一区二区 | 免费一二区| 日韩av一区二区在线观看 | 国产中文字幕在线 | 亚洲美女网址 | 欧美一区永久视频免费观看 | 中文字幕视频在线免费 | 日日骚一区 | 亚洲电影一区 | 国产a视频 | av免费网址 | 台湾av片| 国产亚洲精品精品国产亚洲综合 | 日韩在线免费观看视频 | 一区中文字幕 | 中文二区 | 欧洲成人午夜免费大片 | 欧美日韩综合精品 | 91在线在线| 亚洲国产精品一区久久av篠田 |