【问题标题】:Multiline lambda comparator多线 lambda 比较器
【发布时间】:2014-11-26 13:34:41
【问题描述】:

我从 Java 中的 lambda 表达式开始,有些东西我认为很奇怪,我确信我做错了什么或者它有解决方法。

要定义一个比较器,我可以这样做:

 col.setComparator((CustomCell o1, CustomCell o2) ->
            ((Comparable) o1.getValue()).compareTo(o2.getValue())
        );

不过,如果我只添加两个“{”,那就太好了。我得到一个编译错误:

 col.setComparator((CustomCell o1, CustomCell o2) -> {
            ((Comparable) o1.getValue()).compareTo(o2.getValue());
        });

错误与“{”无关,而是与setComparator

The method setComparator(Comparator<CustomCell>) in the type 
TableColumnBase<CustomParentCell,CustomCell> is not applicable for the arguments 
((CustomCell o1, CustomCell o2) -> {})

我之前尝试过将多行语句用于操作事件,它确实有效:

 setOnAction(event -> {
        // do something
 });

是因为它只有一个参数吗?

【问题讨论】:

    标签: java lambda javafx


    【解决方案1】:

    您使用setOnAction 实现的方法是

    public void handleEvent(ActionEvent event) ;
    

    它的返回类型为void:即它不返回任何东西:

    您使用setComparator 实现的方法是

    public int compare(CustomCell cell1, CustomCell cell2) ;
    

    返回一个值。要使用更长的形式,您必须对返回值的方法有一个显式的 return 语句:

    col.setComparator((CustomCell o1, CustomCell o2) -> {
            return ((Comparable) o1.getValue()).compareTo(o2.getValue());
        });
    

    【讨论】:

    • 谢谢。是的,这就是原因。我得到的错误不是很有帮助。
    猜你喜欢
    • 2017-10-28
    • 2018-04-28
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多