我无法理解如何使用Java 8 Optional
for (A objA : listOfObjectsA) {
if (objA.getStringField() == null) continue;
// some code to do if not null
}
答案 0 :(得分:2)
您不必为此使用Optional
。您可以使用null
过滤Stream
元素:
listOfObjectsA.stream()
.filter(objA -> objA.getStringField() != null)
.forEach (... do something ...);
要使用Optional
,您可以编写Optional.ofNullable(objA.getStringField()).isPresent()
,但这似乎毫无意义。
答案 1 :(得分:2)
您可以将 Java8 样式的代码替换为流和Optional
。但是我个人认为,在这种具体情况下,这并不比POJO更好(后者更加简单易读):
Optional.ofNullable(listOfObjectsA).orElse(Collections.emptyList()).stream()
.filter(Objects::nonNull)
.filter(objA -> Objects.nonNull(objA.getStringField()))
.forEach(objA -> {
// some code to do if not null
});
如果您确定,给定列表不能为null
,每个元素objA
也不能为null
,那么在这种情况下,您绝对可以避免一些无用的检查:< / p>
listOfObjectsA.stream()
.filter(objA -> Objects.nonNull(objA.getStringField()))
.forEach(objA -> {
// some code to do if not null
});
答案 2 :(得分:2)
如果“某些不为null的代码只能在objA.getStringField()
上运行,则可以执行以下操作:
listOfObjectsA.stream()
.map(A::getStringField)
.filter(Objects::nonNull)
.forEach(e -> ...);
但是,如果您仍然希望访问A
元素,那么正如其他答案所示,您别无选择,只能执行明确的objA.getStringField() != null
:
listOfObjectsA.stream()
.filter(a -> a.getStringField() != null)
.forEach(a -> ...);
答案 3 :(得分:0)
理想情况下,无需选择,您可以
listOfObjectsA.stream().filter(objA -> objA.getStringField() != null)
.forEach(objA -> { /* some code to do if not null*/ });