为了账号安全,请及时绑定邮箱和手机立即绑定

按值集的大小对 HashMap 进行排序

按值集的大小对 HashMap 进行排序

幕布斯7119047 2021-12-30 20:22:53
我想订购一个HashMap:Map<Integer, Set<Integer>> unsorted由值集的大小决定。我试图这样做:        Map<Integer, Set<Integer>> sorted = unsorted.entrySet().stream()            .sorted(comparingInt(e->e.getValue().size()))            .collect(toMap(                    Map.Entry::getKey,                    Map.Entry::getValue,                    LinkedHashMap::new            ));但出现错误“不能从静态上下文中引用非静态方法”. 我是 Java 8 Streams 的新手,显然缺少一些微不足道的东西 - 它是什么?
查看完整描述

1 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

简短回答:您缺少合并功能:


.collect(toMap(Map.Entry::getKey,Map.Entry::getValue, (l, r) -> l, LinkedHashMap::new));

即(l, r) -> l上面。


长答案:


您想要使用toMap重载,它采用文档所称的“mapFactory”,本质上它是一个供应商,提供一个新的空地图,结果将插入其中。


现在看看重载是如何定义的:


toMap(Function<? super T,? extends K> keyMapper,

      Function<? super T,? extends U> valueMapper,

      BinaryOperator<U> mergeFunction,

      Supplier<M> mapFactory)

如您所见mergeFunction,需要a才能提供“mapFactory”,否则编译器会认为您正在尝试使用此重载:


toMap(Function<? super T,? extends K> keyMapper,

      Function<? super T,? extends U> valueMapper,

      BinaryOperator<U> mergeFunction)

因此它因上述错误而失败。


查看完整回答
反对 回复 2021-12-30
  • 1 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信