簡體   English   中英

如何在過濾器()java8中使用peek()?

[英]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 假設數據在一個名為sortedLinkedHashMap

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM