Java 8:使用 Comparator.comparing 比较基于给定键的映射中的值
Java 8: Using Comparator.comparing when comparing values from a map based on given keys
我写了一个比较器,它根据字符串键在预定义映射中对应的值来比较它们。
private Comparator<String> periodComparator() {
return (s1, s2) -> {
return periodMap.get(s1).compareTo(periodMap.get(s2));
};
}
但是,IntelliJ 突出显示它是为了告诉我它可以用 Comparator.comparing
(或类似的东西)代替。我不明白这怎么可能。 IntelliJ 是在这里标记误报还是真的有更简洁的方法使用 Java 8 magic 来做到这一点?
如果您使用的是 IntelliJ,它表明可以替换它,只需将鼠标光标移动到有问题的行(到有问题的代码),然后按 Alt + Enter,您将看到一个选项菜单,其中之一是用 IntelliJ 建议的内容替换您当前的代码,所以只要这样做,您就会看到它应该如何基于 IDEA 的建议。
将编辑和添加图片。
示例:
按 Alt + Enter 后:
你终于select让IntelliJ替换你的代码后,最终结果是:
好了。
应该这样做:
Comparator<String> periodComparator = Comparator.comparing(periodMap::get)
或者作为一种方法,同样的事情:
private Comparator<String> periodComparator(){
return Comparator.comparing(periodMap::get);
}
Comparator 是一个函数式接口。所以它只有一个非静态或默认的方法来覆盖。
您使用泛型来告诉函数应该比较哪种对象。那么你只需要给出一个lamda函数来定义真正的比较逻辑。
所有其他功能均由默认方法定义(这就是魔法 ;))
我写了一个比较器,它根据字符串键在预定义映射中对应的值来比较它们。
private Comparator<String> periodComparator() {
return (s1, s2) -> {
return periodMap.get(s1).compareTo(periodMap.get(s2));
};
}
但是,IntelliJ 突出显示它是为了告诉我它可以用 Comparator.comparing
(或类似的东西)代替。我不明白这怎么可能。 IntelliJ 是在这里标记误报还是真的有更简洁的方法使用 Java 8 magic 来做到这一点?
如果您使用的是 IntelliJ,它表明可以替换它,只需将鼠标光标移动到有问题的行(到有问题的代码),然后按 Alt + Enter,您将看到一个选项菜单,其中之一是用 IntelliJ 建议的内容替换您当前的代码,所以只要这样做,您就会看到它应该如何基于 IDEA 的建议。
将编辑和添加图片。
示例:
按 Alt + Enter 后:
你终于select让IntelliJ替换你的代码后,最终结果是:
好了。
应该这样做:
Comparator<String> periodComparator = Comparator.comparing(periodMap::get)
或者作为一种方法,同样的事情:
private Comparator<String> periodComparator(){
return Comparator.comparing(periodMap::get);
}
Comparator 是一个函数式接口。所以它只有一个非静态或默认的方法来覆盖。
您使用泛型来告诉函数应该比较哪种对象。那么你只需要给出一个lamda函数来定义真正的比较逻辑。
所有其他功能均由默认方法定义(这就是魔法 ;))