我有地图
Map<Nominal, Integer>
,上面有物体及其数量:
a -> 3
b -> 1
c -> 2
我需要从中得到这样的
List<Nominal>
:
a
a
a
b
c
c
如何使用 Stream API 执行此操作?
Collections::nCopies
来达到我们想要的结果:
private static <T> List<T> transform(Map<? extends T, Integer> map) {
return map.entrySet().stream()
.map(entry -> Collections.nCopies(entry.getValue(), entry.getKey()))
.flatMap(Collection::stream)
.collect(Collectors.toList());
}
在演示中,由于未提供
Map
的定义,我将 Nominal
的键类型从 Object
更改为 Nominal
。然而,更改密钥类型不会影响解决方案。
流式传输条目并使用 flatMap 根据值生成每个键的多个副本。
List<Nominal> expanded = map.entrySet().stream()
.flatMap(e -> generate(e::getKey).limit(e.getValue()))
.collect(toList());