将回调转换为Java 8 Lambda表达式

将回调转换为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

在我当前的项目中,我正在开发一个相当简单的JavaFXGUI,其中包含一个TreeTableView。 要初始化视图,我有以下代码

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表达式只能用于接口