在forEach循环/流中进行迭代以检查非空值并返回该项目的第一个非空值。
List<Box> boxes;
// Each box has List<Items>
//Each item has a value
需要遍历各个框,并在每个框中找到没有空值的非空项目。
答案 0 :(得分:0)
您可以结合使用filter和flatMap。 您经历的步骤是
flatMap
代码如下:
List<Item> presentItems = boxes.stream()
.filter(b -> b != null && b.getItems() != null)
.flatMap(Box::getItems)
.filter(i -> i != null)
.collect(Collectors.toList());
换句话说,如果您可以避免的话,我建议您不要在列表中保留空条目,这样会使您的生活更加轻松。
答案 1 :(得分:0)
您可以遵循以下代码:
items = boxes.stream()
.filter(box -> box.items!= null) // check for not null-items
.flatMap(box -> box.items.stream()
.filter(Objects::nonNull) // check for not null item
.filter(item -> item.value != null)) // check for not null value
.collect(Collectors.toList());