我使用的是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));}上面的代码基本上根据它的id对SRoad列表进行排序。请注意,在最后一行中,方法引用用一对额外的括号括起来。这不是一个错别字,它必须像这样才能使java工作。我发现这行代码相当于:c.sort(((o1, o2) -> o1.compareTo(o2)));为什么它们是等价的?这是什么语法?
1 回答
慕容708150
TA贡献1831条经验 获得超4个赞
额外的括号集是多余的。你可能会失去它们:
c.sort(SRoad::compareTo);
关于语法 - 有一个参数。此方法采用您正在排序的列表的任意两个元素并对其进行比较。两种方式都传递这样的方法引用。sort
Comparator
添加回答
举报
0/150
提交
取消