Java 如何将包含字符串列表(内部列表)的对象列表转换为字符串列表

Java 如何将包含字符串列表(内部列表)的对象列表转换为字符串列表,java,collections,java-8,java-stream,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 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;
    }

}
公共类角色访问{
私有字符串roleId;
私人名单;
公共字符串getRoleId(){
返回roleId;
}
公共void setRoleId(字符串roleId){
this.roleId=roleId;
}
公共列表getapidList(){
返回空想家;
}
public void setapidList(列表apidList){
this.apidlist=apidlist;
}
}
我想创建一个新列表,它将添加roleaccess中的所有ApidList

List<String> apiIdList = new ArrayList<>();
for (RoleAccess roleAccess : roleAccessList) {
            if (roleAccess.getApiIdList() != null) {
                apiIdList.addAll(roleAccess.getApiIdList());
            }
        }
List apidlist=new ArrayList();
for(角色访问角色访问:角色访问列表){
if(roleAccess.getapidList()!=null){
addAll(roleAccess.getapidlist());
}
}
我们如何使用流api,或者哪种解决方案是最好的

我选中了“普通对象列表到列表”,但我想选择“对象列表”和“内部列表到列表” 我试过这个

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

使用
flatMap
代替
map

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

列表apidlist=roleAccessList.stream()的更多信息,请查看
List<String> apiIdList = roleAccessList.stream()
                       .map(RoleAccess::getApiIdList)
                       .filter(Objects::nonNull)
                       .flatMap(Collection::stream)
                       .collect(Collectors.toList());
.map(RoleAccess::getApiIdList) .filter(对象::非空) .flatMap(集合::流) .collect(Collectors.toList());