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函数来定义真正的比较逻辑。

所有其他功能均由默认方法定义(这就是魔法 ;))