2017-03-28 1 views
1

Ich habe eine Liste von Objekten Liste, für jede Instanz dieser 'Ort'-Objekte enthält eine Anzahl von Mitgliedern und Listen. Ich möchte in der Lage sein, die übergeordnete Liste basierend auf dem Vorhandensein eines Werts in einer untergeordneten Liste zu filtern.Filtern einer Liste nach Wert des Elements in der untergeordneten Liste

Diese Objektlisten sind JSON, die mit Jackson in ein einfaches altes Java-Objekt konvertiert werden.

Mit den folgenden Beispieldaten (die in meinem tatsächlichen Code in ein Java-Objekt konvertiert wurden, aber hier in JSON zur besseren Lesbarkeit angezeigt werden) möchte ich alle Stellen herausfiltern, die kein Produkt 'C' haben.

{ 
    "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 
     } 
     ] 
    } 
    ] 
} 

Ich habe so weit gekommen, was offensichtlich nicht funktionieren, da es nur beim ersten Produkt aussehen:

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

Antwort

2

Versuchen Sie folgendes:

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

Ausgezeichnet, danke das hat funktioniert! –

Verwandte Themen