我试图收集到使用Java 8,而不使用foreach操作的ListMultiMap。
如果我把代码写在Java 7中,这将是这样的:
ListMultimap<String, String> result = ArrayListMultimap.create();
for(State state: states) {
for(City city: state.getCities()) {
result.put(state.getName(), city.getName());
}
}
我在网上找到一个网站,大约创建您自己的收藏会谈,在方案中使用,如这一个。我用于收集此实现。然后我写了下面的代码:
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。
有人可以帮助我吗?谢谢!
ImmutableListMultimap.flatteningToImmutableListMultimap
return states.stream()
.collect(flatteningToImmutableListMultimap(
State::getName,
state -> state.getCities().stream().map(City::getName)));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句