簡體   English   中英

如何合並從執行程序Future返回的Multimaps列表與Java8

[英]How to merge List of Multimaps returned from executors Future with Java8

假設我有以下片段:(未來是可調用任務的結果)

List<Map<String, List<Offset>>> results = new ArrayList<>();

for (Future<Map<String, List<Offset>>> future : listFutures)   {
    Map<String, List<Offset>> mapResult = future.get();
    results.add(mapResult);
}

我想將所有"Map<String, List<Offset>>"聚合成所有Futures flatMap ,用例將是地圖之間的重復鍵,在這種情況下我需要將值添加到List<Offset>

我期望在flatMap之后,得到"Map<String, List<Offset>>"

PS

我看到了一些例子,但他們在迭代期間沒有說話。

       Stream.concat(map1.entrySet().stream(), map2.entrySet().stream())
                        .collect(Collectors.toMap(
                            entry -> entry.getKey(), 
                            entry -> entry.getValue()
                        )
                    );

有什么建議嗎?

如果我把一切都搞定了......

listFutures.stream()
            .map(x -> {
                try {
                    return x.get();
                } catch (InterruptedException | ExecutionException e) {
                    throw new RuntimeException(e);
                }
            })
            .flatMap(x -> x.entrySet().stream())
            .collect(Collectors.toMap(
                    Entry::getKey,
                    Entry::getValue,
                    (left, right) -> {
                        left.addAll(right);
                        return left;
                    }));

並且可能是一種更簡單的方法:

    for (Future<Map<String, List<Offset>>> f : listFutures) {
        Map<String, List<Offset>> inner = f.get();
        for (Entry<String, List<Offset>> e : inner.entrySet()) {
            results.merge(e.getKey(), e.getValue(), (left, right) -> {
                left.addAll(right);
                return left;
            });
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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