当null为可能时,Java setCellValueFactory lambda表达式

时间:2017-03-08 19:44:46

标签: java javafx lambda

我有以下代码行来在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?

1 个答案:

答案 0 :(得分:1)

尝试使用可选

branchActionColumn.setCellValueFactory(cd -> 
    Optional.ofNullable(cd.getValue().getAction())
        .map(action -> action.getTextProperty())
        .orElseGet(() -> new SimpleStringProperty(""))
);