我有以下代码可以正常工作:

    Map<String, List<String>> map = Arrays.stream(input)
            .collect(groupingBy(s -> s.split("\\s+")[0],
                    TreeMap::new, toList()));


但是我需要TreeMap以降序排序。我试过了:

    Map<String, List<String>> map = Arrays.stream(input)
            .collect(groupingBy(s -> s.split("\\s+")[0],
                    new TreeMap<>((a, b) -> b.compareTo(a)), toList()));


但是我收到错误“找不到与对象比较的符号”。

如何使TreeMap接受比较器?有可能吗?

最佳答案

它需要一个Supplier<Map>,您可以使用如下的lambda进行制作:

() -> new TreeMap<>((a, b) -> b.compareTo(a))


同样,由于您只想颠倒顺序,因此可以使用Comparator类中提供的方法:

() -> new TreeMap<>(Comparator.reverseOrder())

关于java - 如何为MapFactory指定比较器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25518210/

10-13 03:02