0
votes

Comment trouver un élément dans une matrice d'objet avec des flux

J'ai une liste d'objets. XXX PRE>

Chaque élément comporte 1 ArrayList P>

public class Property {
    private String key;
    private String value;
}


3 commentaires

Vous voulez dire n'importe quel PropertyList Élément où clé.equals ("test") ?


itemList.stream () .Filter (élément -> item.gepropertylist (). Stream (). AnyMatch (Propriété -> Property.Getkey (). Equals ("")) .Collect (collectionneurs.tolist () );


Oui, si une clé de propriétés d'élément est test, le flux l'ajoutera dans une nouvelle liste.


3 Réponses :


3
votes

Vous pouvez faire comme ceci:

itemList.stream()
          .filter(item -> item.getPropertyList()
                         .stream().anyMatch(property -> property.getKey().equals("Test")))
           .collect(Collectors.toList());


0 commentaires

4
votes

Nettoyeur de bits que la suggestion de HADI:

itemList.stream()
   .filter(item -> item.getPropertyList()
          .stream().map(Property::getKey).anyMatch("Test"::equals))
   .collect(Collectors.toList());


3 commentaires

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 &&


@sakirow sonne plus comme une touche, recherche de la valeur avec quelque chose comme un mapper en utilisation plutôt qu'une entité distincte.



1
votes

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());


1 commentaires

Bon essayez, mais remarquez que cette carte vers Propriété Les objets tandis que l'OP s'attend à recueillir les éléments .