簡體   English   中英

轉換集合列表<string>設置<string>使用 JAVA 8 個流</string></string>

[英]Convert List of Set<String> to Set<String> using JAVA 8 Streams

是否有可能使用 java 8 個流將集合列表轉換為集合。 這是我的清單:

// Get Header Columns to display in EXCEL FILE

    List<Set<String>> keysQuery = listExtractQglobal.parallelStream()
                    .map(m -> m.keySet()).distinct().collect(Collectors.toList()); 

謝謝

只需使用 flatMap

Set<String> a = keysQuery.stream().flatMap(s -> s.stream()).collect(Collectors.toSet());

如評論所示,您還可以將 lambda function 替換為 lambda 參考

 Set<String> a = keysQuery.stream().flatMap(Set::stream).collect(Collectors.toSet());

假設這是您創建列表的方式:

List<Set<String>> keysQuery = listExtractQglobal.parallelStream()
                    .map(m -> m.keySet()).distinct().collect(Collectors.toList());

您實際上可以避免不必要的收集到列表並收集到集合:

Set<String> keysQuery = listExtractQglobal.parallelStream()
                                          .map(Map::keySet)
                                          .distinct()
                                          .flatMap(Collection::stream)
                                          .collect(Collectors.toSet());

順便說一句,我不確定你為什么需要這里的distinct 您是否在所有鍵集中尋找不同的集合或不同的鍵? 在后一種情況下,您可以簡單地省略distinct() ,因為結果Set根據定義包含不同的值:

Set<String> keysQuery = listExtractQglobal.parallelStream()
                                          .map(Map::keySet)
                                          .flatMap(Collection::stream)
                                          .collect(Collectors.toSet());

我會使用中的Stream#mapMulti而不是Stream#flatMap因為它有可能創建空流或非常小的流的開銷

Set<String> keysQuery = listExtractQglobal.parallelStream()
                                          .map(Map::keySet)
                                          .mapMulti((Set<String> set, Consumer<String> consumer) -> {
                                              set.forEach(consumer::accept);
                                          })
                                          .collect(Collectors.toSet()); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM