首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Java 8 streams流式传输带有集合的地图?

如何使用Java 8 streams流式传输带有集合的地图?
EN

Stack Overflow用户
提问于 2018-09-17 02:07:11
回答 2查看 2.2K关注 0票数 0

我想使用Java 8 streams流式传输一个带有集合的地图。

例如,具有以下数据:

代码语言:javascript
复制
Map<String, Collection<Integer>> data;

我想回顾一下用相应的键字符串处理每个整数值的元素。例如:

代码语言:javascript
复制
data.keyValueStream((k,v)-> ...)

你知道怎么做到这一点吗?谢谢。

*关于“你为什么需要它?”这个问题,可能有一堆原因,我不确定它是否重要。不管怎样,我会和你一起“心流”的。我的特定场景是将所有值批量插入到DB中,这些值位于它们的特定键下。让我们把它作为一个通用的Java 8流问题……

EN

回答 2

Stack Overflow用户

发布于 2018-09-17 02:19:20

您可以将Map<String, Collection<Integer>>映射到List<Map.Entry<String, Integer>>

代码语言:javascript
复制
data.entrySet().stream()
  .flatMap(e -> e.getValue().stream().map(v -> new HashMap.SimpleEntry<>(e.getKey(), v)))
  .forEach(e -> System.out.printf("key %s val %d%n", e.getKey(), e.getValue()));

或者:

代码语言:javascript
复制
data.forEach((k, v) -> v.forEach(n -> System.out.printf("key %s val %d%n", k, n)));
票数 5
EN

Stack Overflow用户

发布于 2018-09-17 03:16:58

虽然这可能有点明显,但您也可以这样写:

代码语言:javascript
复制
map.forEach((k, v) -> v.forEach(s -> System.out.println(k + "  " + s)))

例如,在Java 9中。

代码语言:javascript
复制
Map< String , Collection< Integer > > map =
    Map.ofEntries(
        Map.entry( "alpha" , List.of( 1 , 2 , 3 ) ) ,
        Map.entry( "beta" , List.of( 4 , 5 , 6 ) ) ,
        Map.entry( "gamma" , List.of( 7 , 8 , 9 ) )
    )
;

map.forEach( ( k , v ) -> {
        v.forEach( s -> System.out.println( k + "  " + s ) );
    }
);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52357014

复制
相关文章

相似问题

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