如何简化以下工作代码?
说明为什么在您不知道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("");
答案 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("");