我编写了一个比较器,它根据预定义地图中对应的值来比较字符串键。
private Comparator<String> periodComparator() {
return (s1, s2) -> {
return periodMap.get(s1).compareTo(periodMap.get(s2));
};
}
然而,IntelliJ强调这一点告诉我它可以被Comparator.comparing
(或类似的东西)取代。我无法看到这是怎么可能的。 IntelliJ是否在这里引起了误报,或者是否真的有一种更简洁的方法来使用Java 8魔术?
答案 0 :(得分:4)
这应该这样做:
Comparator<String> periodComparator = Comparator.comparing(periodMap::get)
或者作为一种方法,同样的事情:
private Comparator<String> periodComparator(){
return Comparator.comparing(periodMap::get);
}
答案 1 :(得分:3)
如果您正在使用IntelliJ并且它建议可以替换它,只需将鼠标光标移动到相关行(对于相关代码)并按Alt + Enter,您将获得一个选项菜单,其中一个它们将用IntelliJ建议取代您当前的代码,所以只需这样做,您就会看到它应该基于IDEA的建议。
将编辑并添加图片。
示例:
按Alt + Enter:
在您最终选择IntelliJ替换代码后,最终结果为:
所以你去吧。
答案 2 :(得分:1)
Comparator是一个功能界面。所以它只有一个非静态或默认方法来覆盖。
您使用泛型来告诉函数应该比较哪种对象。然后你只需要提供一个lamda函数来定义真正的比较逻辑。
所有其他功能都是由默认方法定义的(这是魔术;))