[英]Convert map key from collection to double - java
我有一個Map<String, List<Double>>
並且由此我想得到一個 SORTED Map<String, Double>
其中兩個地圖中的鍵相同但第二個地圖中的值是來自先貼圖再排序。 我試過了:
public class ListComparator implements Comparator<List<Double>> {
public int compare(List<Double> lhs, List<Double>rhs){
Double lhs_sum = lhs.stream().mapToDouble(a -> a).sum()/lhs.size();
Double rhs_sum = rhs.stream().mapToDouble(a -> a).sum()/rhs.size();
return lhs_sum.compareTo(rhs_sum);
}
}
然后在 main() 中:
ListComparator listComparator = new ListComparator();
infoMap.entrySet().stream()
.sorted(Map.Entry.comparingByValue(listComparator))
.limit(15).forEach(System.out::println);
但這會打印出鍵,並且似乎是一組未排序的不同數量的雙打(應該只有一個雙打)。 我錯過了什么步驟? 謝謝
你只是比較,但我沒有看到你把平均值放在輸出的位置。
嘗試這個:
infoMap.entrySet().stream()
.map(e -> new SimpleEntry<>(e.getKey(),
e.getValue().stream()
.mapToDouble(d -> d).average()
.orElse(0d)))
.sorted(Comparator.comparingDouble(Entry::getValue))
.collect(Collectors.toMap(Entry::getKey, Entry::getValue,
(v1, v2) -> v1, LinkedHashMap::new));
所以你看,第一步是將每個條目轉換為SimpleEntry<String, Double>
,其中 value 是列表的平均值。
第二步是通過Entry::getValue
對那些映射的條目進行排序
最后,將它們收集回一個新的Map<String, Double>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.