2017-03-28 90 views
1

我有一个列表对象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")); 

回答

2

试试这个:

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

非常好,谢谢工作! –