Java 8 lambda列表里面的列表过滤器

时间:2017-11-25 03:43:54

标签: java lambda

示例JSON

[
  {
    "id": "1",
    "products": [
      {
        "id": "333",
        "status": "Active"
      },
      {
        "id": "222",
        "status": "Inactive"
      },
      {
        "id": "111",
        "status": "Active"
      }

    ]
  },
  {
    "id": "2",
    "products": [
      {
        "id": "6",
        "status": "Active"
      },
      {
        "id": "7",
        "status": "Inactive"
      }
    ]
  }
]

我想检索至少包含一个活动产品的对象列表。

下面的代码返回产品列表,但我想要一个ProdcutResponse列表。有什么办法吗?

 response.stream()
 .map(ProductResponse::getProducts)
 .filter(s -> "Active".equals(s.getType()))
 .collect(Collectors.toList()) 

1 个答案:

答案 0 :(得分:3)

因为你没有显示太多代码,所以这将是一个黑暗的镜头。我的主要建议是在将Stream<ProductResponse>收集到列表之前不将Stream<List<Product>>映射到response.stream() .filter(pr -> pr.getProducts().stream().anyMatch(s -> "Active".equals(s.getType()))) .collect(Collectors.toList());

anyMatch

如果您希望allMatch包含 List<ProductResponse>具有有效类型(无论这意味着什么),您可以将Product更改为{{1}}