這是我的哈希圖:
HashMap<Customer, HashSet<Car>> carsBoughtByCustomers = ...
我怎樣才能得到一個新HashMap的,它將包含每個客戶的汽車數量,即大小HashSet?
我想在沒有回圈的情況下做到這一點,但只使用流。
我的嘗試:
HashMap<Customer, Integer> result = (HashMap<Customer, Integer>)
carsBoughtByCustomers.entrySet().stream()
.map(e -> e.getValue().size());
uj5u.com熱心網友回復:
您需要應用終端操作才能從流中獲取結果,collect()在這種情況下,它需要一個Collector.
map()- 是一個中間操作,它產生另一個流,即它是為了轉換流管道而不是生成結果。因此,像這樣的流陳述句myMap.entrySet().stream().map()會導致 a Stream,并且不能分配給型別為 的變數Map。
Map<Customer,Integer> result = carsBoughtByCustomers.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> entry.getValue().size()
));
旁注:
Map針對and之類的介面撰寫代碼,而不是and之類的Set具體型別,可以使您的代碼更加靈活。請參閱:“編程到介面”是什么意思?HashMapHashSet- 沒有終端操作的流是完全有效的,即它會編譯(如果沒有錯誤是代碼),但不會被執行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/483647.html
上一篇:使用條件重命名awk列的值
