Как преобразовать список объектов, содержащий список строк (внутренний список), в список строк - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть класс как

public class RoleAccess {

    private String roleId;

    private List<String> apiIdList;

    public String getRoleId() {
        return roleId;
    }

    public void setRoleId(String roleId) {
        this.roleId = roleId;
    }

    public List<String> getApiIdList() {
        return apiIdList;
    }

    public void setApiIdList(List<String> apiIdList) {
        this.apiIdList = apiIdList;
    }

}

Я хочу создать новый список, который будет добавлять все apiIdlist из roleaccess

List<String> apiIdList = new ArrayList<>();
for (RoleAccess roleAccess : roleAccessList) {
            if (roleAccess.getApiIdList() != null) {
                apiIdList.addAll(roleAccess.getApiIdList());
            }
        }

Как мы можем сделать с потоковым API или, что лучшерешение сделать это?

Я проверил обычный список объектов в список, но я хочу, чтобы список объектов и внутренний список в список, я попробовал это

  List<String> apiIdList = roleAccessList.stream()
                          .map(RoleAccess::getApiIdList)
                          .collect(ArrayList::new, List::addAll, List::addAll);

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019
List<String> apiIdList = roleAccessList.stream()
                       .map(RoleAccess::getApiIdList)
                       .filter(Objects::nonNull)
                       .flatMap(Collection::stream)
                       .collect(Collectors.toList());
0 голосов
/ 26 февраля 2019

Альтернативное решение будет:

List<String> apiIdList = roleAccessList.stream()
        .flatMap(a -> a.getApiIdList().stream()) // flat map the apiIds from list
        .filter(Objects::nonNull) // use only not null
        .collect(Collectors.toList());
0 голосов
/ 26 февраля 2019

Используйте flatMap вместо map:

List<String> apiIdList = roleAccessList.stream()
    .flatMap(e -> e.getApiIdList().stream())
    .collect(Collectors.toList());

Пожалуйста, ознакомьтесь с ссылкой для получения дополнительной информации о flatMap.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...