通过检查是否为空来简化分配

时间:2019-05-07 11:43:02

标签: java

如何简化以下工作代码?

说明为什么在您不知道Apache POI的情况下必须进行null检查:row.getCell(0).getStringCellValue()会引发NullPointerException,因为如果单元格为row.getCell(0)将是null空的。

String datapoint = (row.getCell(0) != null) ? row.getCell(0).getStringCellValue() : "";

我尝试过此操作,但是它不起作用,因为NPE会在null检查中抛出:

String datapoint = Optional.ofNullable(row.getCell(0).getStringCellValue()).orElse("");

2 个答案:

答案 0 :(得分:4)

Optional.ofNullable(row.getCell(0))
    .map(cell -> cell.getStringCellValue())
    .orElse("");

您可以使用方法引用代替lambda,但是我不确定您使用的是哪个API。

例如

Optional.ofNullable(row.getCell(0))
    .map(Cell::getStringCellValue)
    .orElse("");

答案 1 :(得分:1)

使用Optional#map

Optional.ofNullable(row)
        .map(r -> r.getCell(0))
        .map(cell -> cell.getStringCellValue())
        .orElse("");

如果您确定row不为空,则从封装的第一层抽象自己

Optional.ofNullable(r.getCell(0))
        .map(cell -> cell.getStringCellValue())
        .orElse("");