簡體   English   中英

Java-Stream - 將列表轉換為嵌套的 Map

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

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