получить список идентификаторов из списка объектов из внутреннего списка Java 8 - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть список класса сущности:

public class Entity
{
    private long id;    
    private List<InnerEnity> data;

    public long getId() {
        return id;
    }

    public List<InnerEnity> getData() {
        return data;
    }
}

это класс InnerEnity

public class InnerEnity 
{
    private long id;    
    private String data;

    public long getId() {
        return id;
    }

    public String getData() {
        return data;
    }
}

мне нужен список идентификаторов InnerEnity.Чтобы решить эту проблему, я пытаюсь что-то вроде этого: -

List innerEnityIds = listOfEnity.stream().map(sys -> sys.getData().stream().map(obj->obj.getId().collect(Collectors.toList())));

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Я думаю, что это может помочь (не проверял):

List<Long> innerEntityIds = listOfEnity.stream()
    .flatMap(e -> e.getData().stream()) // 1
    .map(ie -> ie.getId())  // 2
    .collect(Collectors.toList()); // 3

1) поток всех внутренних сущностей в один поток с использованием flatMap 2) сопоставление каждой внутренней сущности с ее идентификатором 3)собрать идентификаторы в список

0 голосов
/ 25 февраля 2019

Здесь вам нужно flatMap:

List<Long> innerEnityIds = 
    listOfEnity.stream() // Stream<Entity>
               .flatMap(sys -> sys.getData().stream().map(InnerEntity::getId)) // Stream<Long>
               .collect(Collectors.toList()); // List<Long>

Или вы можете разбить шаг flatMap на flatMap + map:

List<Long> innerEnityIds = 
    listOfEnity.stream() // Stream<Entity>
               .flatMap(sys -> sys.getData().stream()) // Stream<InnerEntity>
               .map(InnerEntity::getId) // Stream<Long>
               .collect(Collectors.toList()); // List<Long>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...