我有一個LinkedHashMap
。如何在filter()java8中使用peek()?
sorted:{0=[1, 2], 5=[4, 3], 1=[2, 0, 3], 2=[4, 0, 1], 3=[4, 5, 1], 4=[5, 2, 3]}
我試着根據其大小過濾每個鍵的值。例如,對於入門2=[4, 0, 1]
,我需要過濾的值使得按鍵應該只有值的大小大於或等於(>=
)它
考慮2=[4, 1]
:因爲0
只有兩個元素,我們將其刪除。 4和1有三個元素等於2的大小,所以我們保留它。
最終的輸出應該是:
nodes_withHighDegreee :{0=[1, 2], 5=[4, 3], 1=[2, 3], 2=[4, 1], 3=[4, 1], 4=[2, 3]}
我想:
Map<Integer, List<Integer>> nodes_withHighDegree = sorted.entrySet().stream()
.peek(e -> e.getValue().filter((a,b)-> map.get(a).size() >= map.get(b).size()))
.collect(LinkedHashMap::new, (m, e) -> m.put(e.getKey(), e.getValue()), (m0, m1) -> m0.putAll(m1));
System.out.println("After sort" + nodes_withHighDegree);
如何在這裏使用過濾功能?
請注意,一次通過將不夠。由於鍵中元素的數量可能會減少,因此您必須再次檢查。 –
@tobias_k我猜計數應該基於初始地圖。 – Tunaki
@tobias_k我不認爲你明白這裏提到的是什麼。也許OP可以澄清,但我的理解是:讓我們以長度爲3的'4 = [5,2,3]'爲例。在初始映射中,'5'與長度爲'2'的列表關聯,所以我們刪除它('2 <3');那麼'2'與一個長度爲'3'的列表相關聯,所以我們保留它('3> = 3')等。 – Tunaki