J'ai une liste d'objets. Chaque élément comporte 1 ArrayList P> public class Property {
private String key;
private String value;
}
3 Réponses :
Vous pouvez faire comme ceci:
itemList.stream() .filter(item -> item.getPropertyList() .stream().anyMatch(property -> property.getKey().equals("Test"))) .collect(Collectors.toList());
Nettoyeur de bits que la suggestion de HADI:
itemList.stream() .filter(item -> item.getPropertyList() .stream().map(Property::getKey).anyMatch("Test"::equals)) .collect(Collectors.toList());
Comment puis-je ajouter et conditionner entre les propriétés. Ex: Si propriété.getkey = test et propriété.gevalue = foo and immeuble.getkey = bar et propriété.gevalue = xx
@sakirow comme je l'ai écrit, vous ne pouvez pas. Utilisez la façon dont Hadi a montré, avec logique && code>
@sakirow sonne plus comme une touche, recherche de la valeur avec quelque chose comme un mapper code> en utilisation plutôt qu'une entité distincte.
Si vous souhaitez avoir une liste de classes de propriétés correspondantes, vous pouvez le faire avec Flatmap:
final List<Property> collect = itemList.stream() .flatMap(item -> item.getPropertyList().stream()) .filter(property -> "Test".equals(property.getKey())) .collect(Collectors.toList());
Bon essayez, mais remarquez que cette carte vers Propriété CODE> Les objets tandis que l'OP s'attend à recueillir les éléments
code>.
Vous voulez dire n'importe quel i>
PropertyList CODE> Élément où
clé.equals ("test") code>?
itemList.stream () .Filter (élément -> item.gepropertylist (). Stream (). AnyMatch (Propriété -> Property.Getkey (). Equals ("")) .Collect (collectionneurs.tolist () ); code>
Oui, si une clé de propriétés d'élément est test, le flux l'ajoutera dans une nouvelle liste.