[英]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.