![](/img/trans.png)
[英]java 8 streams how to convert a Map<String, List<Strings>> to a List<String> will all the string values?
[英]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.