Multiline lambda comparator
17,144
The method you are implementing with setOnAction
is
public void handleEvent(ActionEvent event) ;
It has a return type of void
: i.e. it doesn't return anything:
The method you are implementing with setComparator
is
public int compare(CustomCell cell1, CustomCell cell2) ;
which returns a value. To use the longer form, you must have an explicit return statement for methods that return a value:
col.setComparator((CustomCell o1, CustomCell o2) -> {
return ((Comparable) o1.getValue()).compareTo(o2.getValue());
});
Author by
luanjot
Updated on June 01, 2022Comments
-
luanjot almost 2 years
I am starting with the lambda expressions in Java and there is something that I consider bizarre and I am sure that I am doing something wrong or it has a workaround.
To define a comparator, I can do:
col.setComparator((CustomCell o1, CustomCell o2) -> ((Comparable) o1.getValue()).compareTo(o2.getValue()) );
Which is great, however, if I just add two "{". I get a compilation error:
col.setComparator((CustomCell o1, CustomCell o2) -> { ((Comparable) o1.getValue()).compareTo(o2.getValue()); });
The error is not related to the "{", but to
setComparator
:The method setComparator(Comparator<CustomCell>) in the type TableColumnBase<CustomParentCell,CustomCell> is not applicable for the arguments ((CustomCell o1, CustomCell o2) -> {})
I have tried using the multiline statements before for actionevents and it does work:
setOnAction(event -> { // do something });
Is it because it only has one argument?
-
luanjot over 9 yearsThank you. Yes, that is the reason. The error I was getting was not very helpful.