在Java 8循环中迭代和终止

时间:2019-06-09 11:55:12

标签: java-8 iteration java-stream

在forEach循环/流中进行迭代以检查非空值并返回该项目的第一个非空值。

List<Box> boxes; // Each box has List<Items> //Each item has a value

需要遍历各个框,并在每个框中找到没有空值的非空项目。

2 个答案:

答案 0 :(得分:0)

您可以结合使用filter和flatMap。 您经历的步骤是

  1. 过滤掉空框和没有项目的框
  2. 使用flatMap
  3. 获取所有盒子的所有物品的列表
  4. 过滤掉所有空项目

代码如下:

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());