java - 用方括号括住方法引用是什么意思?

标签 java lambda syntax java-8 method-reference

我正在使用 Java 8。我知道它有 lambda、方法引用等新功能。但我对这段代码感到困惑:

static class SRoad implements Comparable<SRoad> {
    int id;

    public SRoad(int id) {
        this.id = id;
    }

    @Override
    public int compareTo(SRoad o) {
        return this.id - o.id;
    }
}

public static void main(String[] args) {

    ArrayList<SRoad> c = new ArrayList<>();
    // Assume I added some instances in to the list...
    c.sort((SRoad::compareTo));
}

上面的代码基本上根据 SRoad 的 id 对列表进行排序。请注意,在最后一行中,方法引用被一对额外的括号括起来。这不是拼写错误,java 必须这样才能工作。我发现这行代码相当于:

c.sort(((o1, o2) -> o1.compareTo(o2)));

为什么它们是等价的?这个语法是什么?

最佳答案

额外的括号是多余的。你可能会失去它们:

c.sort(SRoad::compareTo);

关于语法 -sort 有一个 Comparator 参数。这是一种获取要排序的列表中的任意两个元素并进行比较的方法。两种方式都传递这样的方法引用。

关于java - 用方括号括住方法引用是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55333287/

相关文章:

java - 如何用文件源替换 SecretKeyFactory.getInstance ("Some String")

java - 我如何在 Maven 插件运行之前执行一组目标?

c++ - 在 C++ 中,我们如何使用执行函数的有效 X(Args...) 语法调用所有内容?

c# - 如何根据类型列表检查对象的类型?

mysql - 如何处理 '#mysql50#.cache'数据库?

python - 类型错误 : unsupported operand type(s) for &: 'float' and 'float'

html - CSS 网格 - 为什么 "justify-items"变灰但有效?

Java 代理不会加载到 JVM 中

java - 计算BigOh,迭代除法

c++ - 从线程中获得的 yield 远低于预期 - 为什么?