【发布时间】:2017-01-12 00:52:47
【问题描述】:
我的情况很奇怪。是否有将 List 流式传输到具有相同值的地图?
即
让a 的类型为Map< Integer, List< String > >
假设b 只是与a 的键对应的整数列表。
b.stream().map(x ->
a.get(x).stream()
.collect(
Collectors.toMap(i -> i, x);
)
);
我想要一个地图,其中所有值都是 x,所有键都来自 b 中的值。
上面的函数应该返回一个Stream< List< Map< String, Int > > >(显然它不起作用)
【问题讨论】:
-
你能展示示例输入和输出数据吗?
-
您发布的代码应该生成一个映射流,每个映射将所有键映射到一个值。我不知道你为什么想要那个,也不知道列表在哪里出现。
-
toMap中的第二个值也需要是 lambdaCollectors.toMap(i -> i, i -> x) -
在我看来,上面的内容会创建一个
Map<String, Int>的流。你可以把它变成一个List<Map<String, Int>>,但在最后一个;之前添加另一个collect调用。不确定作为地图列表流意味着什么 - 这似乎是一个太多的集合/流。 -
这看起来像是一个 XY 问题。如果你想要的只是“一张地图……所有的键都来自 b 中的值”,你可能只想要
Map< Integer, List< String > > result = b.stream().collect( Collectors.toMap(i -> i, a::get) );,假设“x”是List<String>。否则,您应该首先正确描述您的实际问题。
标签: java java-8 java-stream collectors