Java8實現(xiàn)Stream流的合并的方法展示
最近的需求里有這樣一個場景,要校驗一個集合中每個對象的多個Id的有效性。比如一個Customer對象,有3個Id:id1,id2,id3,要把這些Id全部取出來,然后去數(shù)據(jù)庫里查詢它是否存在。
@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())
現(xiàn)在要取3個字段,怎么做呢?
Stream.concat
Stream接口中的靜態(tài)方法concat,可以把兩個流合成一個,我們?nèi)?個字段可以合并兩次:
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個字段,就再繼續(xù)合并。但是這種不夠簡潔,可以使用扁平化流flatMap。
flatMap
flatmap方法讓你把一個流中的每個值都換成另一個流,然后把所有的流連接起來成為一個流。
Stream.flatMap方法的入?yún)橐粋€Function函數(shù),函數(shù)返回值的泛型要求為Stream類型。對比一下,map和flatMap都是將流中的元素映射為我們想要的值,只是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方法返回的流的泛型跟方法入?yún)⒌念愋褪且粯樱厦娴拇a就相當于,Stream.of(stream, stream, stream), 得到的結果就是Stream<Stream>,緊接著用flatMap扁平化處理,把每一個元素合成一個新流。
Java8中的Stream流提供了多種合并方法,可以方便地將多個Stream流合并成一個。其中,concat()方法適用于兩個Stream流的合并,flatMap()方法適用于將一個Stream流中的元素映射成多個Stream流并合并成一個,reduce()方法適用于將Stream流中的元素逐個合并成一個結果。在實際開發(fā)中,可以根據(jù)具體需求選擇不同的合并方法,提高代碼的可讀性和效率。
到此這篇關于Java8實現(xiàn)Stream流的合并的方法展示的文章就介紹到這了,更多相關Java8 Stream流的合并內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java大數(shù)運算BigInteger與進制轉換詳解
這篇文章主要介紹了Java大數(shù)運算BigInteger與進制轉換詳解,Java 提供了 BigInteger(大整數(shù))類和 BigDecimal(大浮點數(shù))類用于大數(shù)運算,這兩個類都繼承自 Number 類(抽象類),由于 BigInteger 在大數(shù)運算中更常見,需要的朋友可以參考下2023-09-09
Java日期工具類操作字符串Date和LocalDate互轉
這篇文章主要介紹了Java日期工具類操作字符串Date和LocalDate互轉,文章首先通過需要先引入坐標展開主題的相關內(nèi)容介紹,需要的朋友可以參一下2022-06-06
Spring?Security實現(xiàn)添加圖片驗證功能
這篇文章主要為大家介紹了Spring?Security實現(xiàn)添加圖片驗證功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
JavaWeb實戰(zhàn)之編寫單元測試類測試數(shù)據(jù)庫操作
這篇文章主要介紹了JavaWeb實戰(zhàn)之編寫單元測試類測試數(shù)據(jù)庫操作,文中有非常詳細的代碼示例,對正在學習javaweb的小伙伴們有很大的幫助,需要的朋友可以參考下2021-04-04

