如何在地图中转移列表>

时间:2018-05-10 14:41:42

标签: java arraylist hashmap java-stream

我有工作场所和存储在每个工作场所的货币金额。我需要将其转换为Map,以便键是货币,而值是 - 所有作业的金额。例如,一个工作场所包含20美元和40欧元,第二个工作场所包含50美元和10欧元。因此,在地图上应该是-70美元和50欧元。如何使用.stream()

执行此操作

1 个答案:

答案 0 :(得分:0)

我假设您有一些课程Workspace,看起来有点像这样:

class Workspace {
    private List<Job> jobs;
    public List<Job> getJobs() {
        return jobs;
    }
}
class Job {
    private String currency;
    private int amount;
    public String getCurrency() {
        return currency;
    }
    public int getAmount() {
        return amount;
    }
}

现在您要将List<Workspace>转换为Map<String,Integer>。这很简单:

workspaces.stream()
    .flatMap(w -> w.getJobs().stream())
    .collect(Collectors.groupingBy(Job::getCurrency, Collectors.summingInt(Job::getAmount)));

如果这不是您想要的,您应该编辑并澄清您的问题。