Java 8:在比较基于给定键的映射中的值时使用Comparator.comparing

时间:2017-12-11 17:03:01

标签: java java-8 comparator

我编写了一个比较器,它根据预定义地图中对应的值来比较字符串键。

 private Comparator<String> periodComparator() {
    return (s1, s2) -> {
      return periodMap.get(s1).compareTo(periodMap.get(s2));
    };
  }

然而,IntelliJ强调这一点告诉我它可以被Comparator.comparing(或类似的东西)取代。我无法看到这是怎么可能的。 IntelliJ是否在这里引起了误报,或者是否真的有一种更简洁的方法来使用Java 8魔术?

3 个答案:

答案 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的建议。

将编辑并添加图片。

示例:

enter image description here

按Alt + Enter:

enter image description here

在您最终选择IntelliJ替换代码后,最终结果为:

enter image description here

所以你去吧。

答案 2 :(得分:1)

Comparator是一个功能界面。所以它只有一个非静态或默认方法来覆盖。

您使用泛型来告诉函数应该比较哪种对象。然后你只需要提供一个lamda函数来定义真正的比较逻辑。

所有其他功能都是由默认方法定义的(这是魔术;))