如何在过滤器()java8中使用peek()? - java

我有一个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);

在这里如何使用过滤功能?

java大神给出的解决方案

您可以使用Map.replaceAll轻松完成。假设数据在名为LinkedHashMapsorted内部:

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 note:

存在此方法主要是为了支持调试,您需要在其中查看元素流过管道中特定点的情况。

实例化类型<?>的泛型类 - java

我正在为SCJP / OCPJP学习,并且遇到了一个对我来说很奇怪的示例问题。该示例代码实例化了两个通用集合:List<?> list = new ArrayList<?>(); List<? extends Object> list2 = new ArrayList<? extends Object>(); …

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

JAVA:如何检查对象数组中的所有对象是否都是子类的对象? - java

我有一个对象数组。现在,我要检查所有这些对象是否都是MyObject的实例。有没有比这更好的选择:boolean check = true; for (Object o : justAList){ if (!(o instanceof MyObject)){ check = false; break; } } java大神给出的解决方案 如果您不喜欢循环,则…

从方法返回数组-Java - java

private static Coordinate[] getCircleCoordintaes() { Coordinate coordinates[] = {new Coordinate(0, 0)}; return coordinates; } 以上程序工作正常。在上面的程序中,返回的坐标数组首先初始化了数组使用这条线Coordinate coordi…