如何使用<Object>java Stream API从Map<Object,Integer>收集数据以列出?



我有映射Map<Nominal, Integer>与对象和它们的计数:

a -> 3
b -> 1
c -> 2

我需要从中得到这样一个List<Nominal>:

a
a
a
b
c
c

我如何使用流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());
}

<Ideone演示/kbd>

<

评论/h3>

在演示中,我将Map的键类型从Nominal更改为Object,因为没有提供Nominal的定义。但是,更改密钥类型不会影响解决方案。

将条目流式传输,并使用flatMap根据值生成每个键的多个副本。

List<Nominal> expanded = map.entrySet().stream()
.flatMap(e -> generate(e::getKey).limit(e.getValue()))
.collect(toList());

相关内容

  • 没有找到相关文章

最新更新