簡體   English   中英

如何將包含字符串列表(內部列表)的對象列表轉換為字符串列表

[英]How to convert List Of Objects containing list of String (inner list) to List of String

我有 class 喜歡

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

}

我想創建一個新列表,它將添加來自 roleaccess 的所有 apiIdlist

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

我們如何處理 stream api 或者這是最好的解決方案?

我檢查了正常的 object 列表,但我想列出 object 和內部列表我試過這個

  List<String> apiIdList = 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());

請在鏈接上查看有關flatMap更多信息。

List<String> apiIdList = roleAccessList.stream()
                       .map(RoleAccess::getApiIdList)
                       .filter(Objects::nonNull)
                       .flatMap(Collection::stream)
                       .collect(Collectors.toList());

一種替代解決方案是:

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());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM