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

我想订购一个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 的新手,显然缺少一些微不足道的东西 - 它是什么?


幕布斯7119047
浏览 157回答 1
1回答

偶然的你

简短回答:您缺少合并功能:.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,&nbsp; &nbsp; &nbsp; Function<? super T,? extends U> valueMapper,&nbsp; &nbsp; &nbsp; BinaryOperator<U> mergeFunction,&nbsp; &nbsp; &nbsp; Supplier<M> mapFactory)如您所见mergeFunction,需要a才能提供“mapFactory”,否则编译器会认为您正在尝试使用此重载:toMap(Function<? super T,? extends K> keyMapper,&nbsp; &nbsp; &nbsp; Function<? super T,? extends U> valueMapper,&nbsp; &nbsp; &nbsp; BinaryOperator<U> mergeFunction)因此它因上述错误而失败。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java