我有以下代码行来在JavaFX中设置一个列:
branchActionColumn.setCellValueFactory(cd -> cd.getValue().getAction().getTextProperty());
这通常可行。但是,有时getAction()
返回null(这可能是正常行为)。在那种情况下,我想只显示空字符串“”。我怎么能这样做?
我试过了:
branchActionColumn.setCellValueFactory(cd -> (cd.getValue().getAction() == null) ? new SimpleStringProperty("") : cd.getValue().getAction().getTextProperty());
虽然这会在TableView中显示属性的初始值,但对该属性所做的任何后续更改都不会反映在TableView中。我相信这是因为我在lambda表达式中创建了一个新属性。
如果我回到branchActionColumn.setCellValueFactory(cd -> cd.getValue().getAction().getTextProperty());
行,那么只要属性发生变化,TableView就会做出相应的响应。这是我想要的行为。我只是希望它在getAction()
返回null时处理这种情况。
这是一个类似的问题,但它适用于C#,它与CellValueFactory无关:C#, in List<>.ConvertAll method using lambda expression, how to make a filter when the object is null?
答案 0 :(得分:1)
尝试使用可选
branchActionColumn.setCellValueFactory(cd ->
Optional.ofNullable(cd.getValue().getAction())
.map(action -> action.getTextProperty())
.orElseGet(() -> new SimpleStringProperty(""))
);