如何将包含String(内部列表)列表的对象列表转换为String列表

Sam*_*azi 1 java collections java-8 java-stream

我喜欢上课

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

我想创建一个新列表,它将添加来自roleaccess的所有apiIdlist

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

我们如何处理流api或哪个是最佳解决方案呢?

我检查了正常的对象列表列表,但我想要列出的对象和内部列表列表我试过这个

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

Ami*_*era 8

使用flatMap而不是map:

List<String> apiIdList = roleAccessList.stream()
    .flatMap(e -> e.getApiIdList().stream())
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

请查看链接以获取更多信息flatMap.