[英]Java-Stream - Transforming List to a nested Map
如何簡化以下代碼? 它可以寫成單個流語句嗎?
澄清: branch的多個id
可以對應同一個appName
我的代碼:
Map<String, Map<Long, BranchSession>> sessions = new HashMap<>();
Map<String, Map<Long, List<Branch>>> map = branches.stream()
.collect(
Collectors.groupingBy(
Branch::getAppName,
Collectors.groupingBy(Branch::getId)
));
map.forEach((key, value) -> {
Map<Long, BranchSession> bs = new HashMap<>();
value.keySet().forEach(bId -> {
List<Branch> list = value.get(bId);
if (list.size() > 0)
bs.put(bId, new BranchSession(value.get(bId).get(0)));
});
sessions.put(key, bs);
});
我假設可能有多個id
對應於同一個appName
(否則創建這樣一個嵌套的 map 是不必要的,如果每個appName
對應於一個唯一的id
您可以創建兩個單獨的映射: branchSession by id Map<Long, BranchSession>
和branchSession 的名稱Map<String, BranchSession>
會更方便)。
如果我的假設是正確的,您可以將收集器toMap
作為groupingBy
的下游應用:
Map<String, Map<Long, BranchSession>> branchSessonByIdAndByName = branches.stream()
.collect(Collectors.groupingBy(
Branch::getAppName,
Collectors.toMap(
Branch::getId,
branch -> new BranchSession(branch.getId())
)
));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.