将回调转换为Java 8 Lambda表达式
在我当前的项目中,我正在开发一个相当简单的JavaFXGUI,其中包含一个TreeTableView。 要初始化视图,我有以下代码将回调转换为Java 8 Lambda表达式,java,lambda,java-8,javafx-8,Java,Lambda,Java 8,Javafx 8,在我当前的项目中,我正在开发一个相当简单的JavaFXGUI,其中包含一个TreeTableView。 要初始化视图,我有以下代码 cmdNrColumn.setCellFactory(new Callback<TreeTableColumn<Command, Command>, TreeTableCell<Command, Command>>() { @Override public TreeTableCell<Command, Command
cmdNrColumn.setCellFactory(new Callback<TreeTableColumn<Command, Command>, TreeTableCell<Command, Command>>() {
@Override public TreeTableCell<Command, Command> call(final TreeTableColumn<Command, Command> p) {
return new TreeTableCell<Command, Command>() {
@Override protected void updateItem(Command item, boolean empty) {
super.updateItem(item, empty);
TreeTableView treeTable = p.getTreeTableView();
if (getIndex() >= treeTable.getExpandedItemCount()) {
setText(null);
} else {
TreeItem<Command> treeItem = treeTable.getTreeItem(getIndex());
if (item == null || empty || treeItem == null || treeItem.getValue() == null) {
setText(null);
} else {
setText(Integer.toString(item.getCmdNr()));
}
}
}
};
}
});
cmdNrColumn.setCellFactory(新回调(){
@覆盖公共TreeTableCell调用(最终TreeTableP列){
返回新的TreeTableCell(){
@覆盖受保护的void updateItem(命令项,布尔值为空){
super.updateItem(项,空);
TreeTableView treeTable=p.getTreeTableView();
如果(getIndex()>=treeTable.getExpandedItemCount()){
setText(空);
}否则{
TreeItem TreeItem=treeTable.getTreeItem(getIndex());
if(item==null | | | | | treeItem==null | | treeItem.getValue()==null){
setText(空);
}否则{
setText(Integer.toString(item.getCmdNr());
}
}
}
};
}
});
作为Java8的新手,我不太确定是否以及如何将其简化为Lambda表达式
任何关于如何将复杂的嵌套调用转换为Lambda表达式的帮助或教程都将不胜感激
谢谢 您可以将外部匿名类转换为lambda表达式:
cmdNrColumn.setCellFactory(p ->
new TreeTableCell<Command, Command>() {
@Override
protected void updateItem(Command item, boolean empty) {
// ...
TreeTableView treeTable = p.getTreeTableView();
// ...
}
});
cmdNrColumn.setCellFactory(p->
新的TreeTableCell(){
@凌驾
受保护的void updateItem(命令项,布尔值为空){
// ...
TreeTableView treeTable=p.getTreeTableView();
// ...
}
});
但是,内部匿名类不可能进行相同的转换,因为TreeTableCell
是一个抽象类,lambda表达式只能用于接口