Mam listę obiektów.

List<Item> itemList = new ArrayList<>();

Każdy element ma 1 arrayList

public class Item {
    private String id;
    private List<Property> propertyList;
}

Właściwość ma klucz i wartość jako ciąg

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

Chcę utworzyć strumień na Itemlist i pobrać nową listę, która zawiera

Item.propertyList.key.equals („Test”) jako nową listę.

0
sakirow 1 kwiecień 2020, 11:24

3 odpowiedzi

Najlepsza odpowiedź

Możesz zrobić tak:

itemList.stream()
          .filter(item -> item.getPropertyList()
                         .stream().anyMatch(property -> property.getKey().equals("Test")))
           .collect(Collectors.toList());
3
Hadi J 1 kwiecień 2020, 08:28

Nieco czystszy niż sugestia Hadiego:

itemList.stream()
   .filter(item -> item.getPropertyList()
          .stream().map(Property::getKey).anyMatch("Test"::equals))
   .collect(Collectors.toList());
4
Naman 1 kwiecień 2020, 09:35

Jeśli chcesz mieć listę pasujących klas właściwości, możesz to zrobić za pomocą flatMap:

final List<Property> collect = itemList.stream()
            .flatMap(item -> item.getPropertyList().stream())
            .filter(property -> "Test".equals(property.getKey()))
            .collect(Collectors.toList());
1
Joel Neukom 1 kwiecień 2020, 09:37