【发布时间】:2015-07-30 22:10:14
【问题描述】:
我正在按照JavaFX TableView Sort Policy 的答案中的示例做我自己的比较器,但是 lambda 表达式对我来说是新的,我无法理解发生了什么。
有效的是丑陋的:
elementsTable.sortPolicyProperty().set(t -> {
Comparator<Row> comparator = (r1, r2)
-> of.wrap.els.getElement(toZ(r1.getSymbol())).getZ() >
of.wrap.els.getElement(toZ(r2.getSymbol())).getZ() ? 1
: of.wrap.els.getElement(toZ(r1.getSymbol())).getZ() <
of.wrap.els.getElement(toZ(r2.getSymbol())).getZ() ? -1
: of.wrap.els.getElement(toZ(r1.getSymbol())).getZ() ==
of.wrap.els.getElement(toZ(r2.getSymbol())).getZ() ? 0
: t.getComparator() == null ? 0 //no column sorted: don't change order
: t.getComparator().compare(r1, r2); //columns are sorted: sort accordingly
FXCollections.sort(elementsTable.getItems(), comparator);
return true;
});
但如果我尝试
int n1,n2;
elementsTable.sortPolicyProperty().set(t -> {
Comparator<Row> comparator = (r1, r2)
->
n1 = of.wrap.els.getElement(toZ(r1.getSymbol())).getZ();
n2 = of.wrap.els.getElement(toZ(r2.getSymbol())).getZ();
n1 > n2 ? 1
: n1 < n2 ? -1
: n1 == n2 ? 0
: t.getComparator() == null ? 0 //no column sorted: don't change order
: t.getComparator().compare(r1, r2); //columns are sorted: sort accordingly
FXCollections.sort(elementsTable.getItems(), comparator);
return true;
});
NetBeans 指示 r2 在比较器中未使用,并且 r1 和 r2 的所有实例在范围内都标记为未定义,但作为 n1 一部分的第一个 r1 除外。
如果我尝试在内部将 n1、n2 声明为 int,它会给出“'.class' expected”,或者 -> 如果 final 则成为非法的表达式开头。
什么是做我正在尝试的正确方法?
【问题讨论】:
-
需要
{}(params)->{ statements }