【发布时间】:2015-11-02 10:16:16
【问题描述】:
我一直在尝试使用 lambda 表达式在 Java8 中制作 Map.Entry Comparator,但发现了一个非常奇怪的行为。
Map<Integer, String> map = new TreeMap<>();
map.put(1, "Hello");
map.put(3, "zzzz");
map.put(2, "aaaa");
map.put(5, "AAAAA");
map.put(4, "aaaa");
Comparator<Map.Entry<Integer, String>> com = Comparator.comparing(Map.Entry::getValue);
com = com.reversed();
Comparator<Map.Entry<Integer, String>> com2 = Comparator.comparing(Map.Entry::getValue).reversed();
com 工作正常,但 com2 包含错误“无法解析方法 getValue”。我真的不知道为什么?有什么建议吗?
附:有什么方法可以避免用 Integer, String 输入 Map.Entry?有更短的方法吗?
【问题讨论】:
-
这似乎是 Java 编译器如何推断泛型参数和 lambda 的返回类型的限制,因此您在这里可能无能为力。您可以等待编译器的下一个版本,它可能会更聪明。 :)
标签: java dictionary lambda java-8 comparator