[英]How to use peek () with filter () java8?
我有一個LinkedHashMap
。
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);
在這里如何使用過濾功能?
您可以使用Map.replaceAll
非常簡單地完成此Map.replaceAll
。 假設數據在一個名為sorted
的LinkedHashMap
:
Map<Integer, List<Integer>> filtered = new LinkedHashMap<>(sorted);
filtered.replaceAll((k, v) -> v.stream()
.filter(i -> sorted.get(i).size() >= v.size())
.collect(Collectors.toList()));
輸出:
{0=[1, 2], 5=[4, 3], 1=[2, 3], 2=[4, 1], 3=[4, 1], 4=[2, 3]}
此代碼創建地圖的副本以保存過濾的實例。 然后,通過過濾每個值並僅保留其計數值大於當前計數值的整數來替換每個值。
在當前的方法中,您正在使用peek
修改值,這是一個不好的做法。 引用其API注釋 :
存在此方法主要是為了支持調試,您需要在其中查看元素流過管道中特定點的情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.