首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 8,拼合地图

Java 8,拼合地图
EN

Stack Overflow用户
提问于 2015-11-13 18:15:14
回答 1查看 513关注 0票数 2

快速问一下,我想将下面的Map<String, Map<String, Integer>>展平为另一个对象。我目前正在做的是在流中嵌入一个流,这是我不太喜欢的,有一种方法可以以线性的方式做到这一点。

代码语言:javascript
复制
this.ourMap.entrySet().stream()
        .flatMap(player ->
                player.getValue().entrySet().stream()
                        .map(game -> new TransformedMap("StaticID", player.getKey(), game.getKey(), game.getValue())))
        .collect(Collectors.toList());
EN

回答 1

Stack Overflow用户

发布于 2015-11-14 11:38:42

使用我的免费StreamEx库,这看起来会更简单:

代码语言:javascript
复制
list = EntryStream.of(this.ourMap)
    .flatMapValues(games -> games.entrySet().stream())
    .mapKeyValue((player, game) -> 
                    new TransformedMap("StaticID", player, game.getKey(), game.getValue()))
    .toList();

这里使用了EntryStream类,它扩展了Stream<Map.Entry>并提供了一些额外的方便方法。在内部,它被转换成这样的东西:

代码语言:javascript
复制
list = this.ourMap.entrySet().stream()
    .<Entry<String, Entry<String, Integer>>>flatMap(entry -> entry.getValue().entrySet()
         .stream().map(e -> new AbstractMap.SimpleImmutableEntry<>(entry.getKey(), e)))
    .map(entry -> 
         new TransformedMap("StaticID", entry.getKey(), entry.getValue().getKey(), entry.getValue().getValue()))
    .collect(Collectors.toList());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33690355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档