在我目前的项目中,我正在开发一个包含TreeTableView的简单JavaFX GUI。 要初始化视图,我有以下代码。
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()));
}
}
}
};
}
});
刚接触Java 8我不太确定是否以及如何将其简化为Lambda表达式。
如何将有关如何将复杂和嵌套调用转换为Lambda表达式的任何帮助或教程都将不胜感激
谢谢!
答案 0 :(得分:12)
您可以将外部匿名类转换为lambda表达式:
cmdNrColumn.setCellFactory(p ->
new TreeTableCell<Command, Command>() {
@Override
protected void updateItem(Command item, boolean empty) {
// ...
TreeTableView treeTable = p.getTreeTableView();
// ...
}
});
但是,内部匿名类不可能进行相同的转换,因为TreeTableCell
是一个抽象类,而lambda表达式只能用于接口。