簡體   English   中英

如何將字符串列表轉換為帶有流的地圖

[英]How to convert a List of strings into a Map with Streams

我必須將列表List<String>轉換為地圖Map<String, Float>

映射必須是列表中的字符串,並且所有的每個都必須為0 (零)。

我怎樣才能轉換這個?

我試過了:

List<String> list = List.of("banana", "apple", "tree", "car");

Map<String, Float> map = list.stream()
    .distinct()
    .collect(Collectors.toMap(String::toString, 0f));

如果您需要將每個0相關聯,則toMap()的第二個參數需要是返回0函數,而不是返回0的值:

Map<String, Float> map = list.stream()
    .collect(Collectors.toMap(
        Function.identity(),  // extracting a key
        str -> 0f,            // extracting a value
        (left, right) -> 0f   // resolving duplicates
    ));

此外,沒有必要使用distinct() 在底層,它會創建一個LinkedHashSet來消除重復,如果大多數流元素都是唯一的並且數據集很大,它可能會顯着增加內存消耗。

相反,我們可以在地圖內處理它們。 為此,我們需要添加第三個參數mergeFunction

並且不需要在已經是字符串的流元素上調用toString()方法來提取String類型的 在這種情況下,我們可以使用Function.identity()來表示不需要轉換。

另一種在不使用stream的情況下做同樣的事情的方法。

Map<String,Float> map = new HashMap<String, Float>();       
list.forEach(s-> map.computeIfAbsent(s,v->0f));

以下工作正常,


Map<String, Float> collect =  
 list.stream() .collect(Collectors
     .toMap(Function.identity(),
             a -> 0f));

暫無
暫無

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

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