排序的数组列表下面的代码工作:与比较器的Java Lambda表达式
ArrayList<Edge> edges = g.edges();
edges.sort((Comparator.comparingInt(Edge::getWeight)).thenComparing(e -> e.getU() + e.getV() + e.getWeight()));
而做的事情同样的另一种方式导致编译时错误
ArrayList<Edge> edges = g.edges();
edges.sort(Comparator.comparingInt(f -> f.getWeight()).thenComparing(e -> e.getU() + e.getV() + e.getWeight()));
g.edges()
返回边缘的一个数组列表。
为什么会发生第一种方法,而第二种方法没有? edges.sort(Comparator.comparingInt(f -> f.getWeight())
就像edges.sort(Comparator.comparingInt(Edge::getWeight))
一样正常工作,但第一种方法不允许使用.thenComparing(\*lambda exp*\)
,而第二种方法允许使用它。这是为什么?
和边缘类 -
static class Edge {
int u;
int v;
int weight;
int getU() {
return u;
}
int getV() {
return v;
}
int getWeight() {
return weight;
}
Edge(int u, int v, int weight) {
this.u = u;
this.v = v;
this.weight = weight;
}
}
据我所知,这并不算作回答的问题*为什么*就是这样。 – Eugene