我正在尝试使用java 8收集到ListMultiMap中,而不使用forEach操作。使用Java 8流收集到Guava的ListMultiMap中
如果我是写在Java 7中的代码,这将是这样的:
ListMultimap<String, String> result = ArrayListMultimap.create();
for(State state: states) {
for(City city: state.getCities()) {
result.put(state.getName(), city.getName());
}
}
我在网上找到一个website谈到有关创建您自己的收藏者在方案中使用,如这一个。 我用这个实现收集器。然后我写了下面的代码:
ListMultimap<String, String> result = states
.stream()
.flatMap(state -> state.getCities().stream()
.map(city -> {
return new Pair(state, city);
}))
.map(pair -> {
return new Pair(pair.first().getName(), pair.second().getName()));
})
.collect(MultiMapCollectors.listMultimap(
Pair::first,
Pair::second
)
);
但在收集的水平,我只能通过只有一个参数,我似乎可以找到一种方法,传递两个参数。 继从网站的例子中,我明白了使用这两种,我需要存储在多重映射一个“对”,如下列:
ArrayListMultimap<String, Pair> testMap = testObjectList.stream().collect(MultiMapCollectors.listMultimap((Pair p) -> p.first().getName()));
但是这不是我要找的,我想要使用状态的名称和城市的名称使用java 8的收集器(并且没有forEach)收集到ListMultimap中。
有人可以帮我吗? 谢谢!
该链接后面的代码看起来没有声音;原始类型,未选中的转换和累加器不需要的类型变量。 –
你是对的!谢谢你指出! 我认为这听起来很合理,因为我发现了很多其他类似实现的网站。谢谢 ! – codastic