鉴于我们有一个银行列表,每个银行都有多个办公室,

public class Bank {
   private String name;
   private List<String> branches;
   public String getName(){
       return name;
   }
   public List<String> getBranches(){
       return branches;
   }
}

例如:
Bank "Mizuho": branches=["London", "New York"]
Bank "Goldman": branches = ["London", "Toronto"]

给定银行列表,我将获得每个城市的银行代表 map 。在上面的例子中,我需要一个结果
Map["London"] == ["Mizuho", "Goldman"]
Map["New York"] == ["Mizuho"]
Map["Toronto"] == ["Goldman"]

如何使用 Java 8 API 实现该结果?使用 Java8 之前的版本很容易,但很冗长。
谢谢你。

最佳答案

Map<String, Set<Bank>> result = new HashMap<>();
for (Bank bank : banks) {
    for (String branch : bank.getBranches()) {
        result.computeIfAbsent(branch, b -> new HashSet<Bank>()).add(bank);
    }
}

关于java - 使用 Java 8 流 API 按多个属性对对象进行分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44171555/

10-10 14:10
查看更多