gpt4 book ai didi

Java:lambda 局部变量声明问题

转载 作者:行者123 更新时间:2023-11-30 03:19:19 25 4
gpt4 key购买 nike

我正在按照 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'预期”,或者 -> 如果是final,则成为表达式的非法开始。

做我正在尝试的事情的正确方法是什么?

最佳答案

不能在 Lambda 表达式范围之外分配变量,并且需要将多个语句放在括号中:

elementsTable.sortPolicyProperty().set(t -> {
Comparator<Row> comparator = (r1, r2) -> {
int n1 = of.wrap.els.getElement(toZ(r1.getSymbol())).getZ();
int n2 = of.wrap.els.getElement(toZ(r2.getSymbol())).getZ();
return 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;
});

您可以通过将比较器设置为外部 lambda 之外的常量来避免疯狂的嵌套。另请注意,永远不会到达最后两个 : t.getComparator()...

关于Java:lambda 局部变量声明问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31725806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com