按子列表中的项目值过滤列表

时间:2017-03-28 03:24:26

标签: java list lambda

我有一个对象列表List,对于那些' Place'的每个实例。那里的对象包含许多成员和列表。 我希望能够根据子列表中存在的值来过滤父列表。

这些对象列表是使用Jackson将JSON转换为普通的旧Java对象。

使用下面的示例数据(在我的实际代码中已转换为java对象,但为了便于阅读,此处以JSON显示)我想过滤掉所有没有产品的地方 ' C'

{
  "places": [
    {
      "Name": "ANAME",
      "location": "A",
      "type": "R",
      "date": "2017-03-27",
      "availableProducts": [
        {
          "product": "A",
          "price": 15.00
        },
        {
          "product": "B",
          "price": 15.00
        },
        {
          "product": "C",
        },
        {
          "product": "D",
        }
      ]
     },
    {
      "Name": "NNAME",
      "location": "A",
      "type": "R",
      "date": "2017-03-27",
      "availableProducts": [
        {
          "product": "E",
          "price": 15.00
        },
        {
          "product": "F",
          "price": 15.00
        }
      ]
    }
  ]
}

我已经走到了这一步,显然它不会起作用,因为它只会看第一个产品:

places.removeIf(p -> !p.getAvailableProducts().get(0).getProduct.equals("C"));

1 个答案:

答案 0 :(得分:2)

试试这个:

places.removeIf(p -> !p.getAvailableProducts().stream().anyMatch(x -> x.getProduct.equals("C")));