gpt4 book ai didi

java - 使用 Java 8 流收集到 Guava 的 ListMultiMap

转载 作者:搜寻专家 更新时间:2023-10-30 19:41:32 28 4
gpt4 key购买 nike

我试图在不使用 forEach 操作的情况下使用 java 8 将数据收集到 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
)
);

但是在收集层面,我只能传递一个参数,我似乎可以找到一种传递两个参数的方法。按照网站上的示例,我了解到要同时使用两者,我需要在 multimap 中存储一个“对”,如下所示:

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)));

关于java - 使用 Java 8 流收集到 Guava 的 ListMultiMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42232691/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com