我想使用Java 8 streams流式传输一个带有集合的地图。
例如,具有以下数据:
Map<String, Collection<Integer>> data;
我想回顾一下用相应的键字符串处理每个整数值的元素。例如:
data.keyValueStream((k,v)-> ...)
你知道怎么做到这一点吗?谢谢。
*关于“你为什么需要它?”这个问题,可能有一堆原因,我不确定它是否重要。不管怎样,我会和你一起“心流”的。我的特定场景是将所有值批量插入到DB中,这些值位于它们的特定键下。让我们把它作为一个通用的Java 8流问题……
发布于 2018-09-17 02:19:20
您可以将Map<String, Collection<Integer>>
映射到List<Map.Entry<String, Integer>>
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()));
或者:
data.forEach((k, v) -> v.forEach(n -> System.out.printf("key %s val %d%n", k, n)));
发布于 2018-09-17 03:16:58
虽然这可能有点明显,但您也可以这样写:
map.forEach((k, v) -> v.forEach(s -> System.out.println(k + " " + s)))
例如,在Java 9中。
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 ) );
}
);
https://stackoverflow.com/questions/52357014
复制相似问题