gpt4 book ai didi

java - 使用guava将集合映射到id

转载 作者:行者123 更新时间:2023-12-02 04:47:38 28 4
gpt4 key购买 nike

我能做到:

Map<Long, MyBean> mappedbean = Maps.uniqueIndex(myBeanList, toId);

哪里

private final Function<BeanWithId, Long> toId=
new Function<BeanWithId, Long>() {
public Long apply(BeanWithId beanWithId) {
return beanWithId.getId();
}
};

但是我如何创建子列表的映射,就像这样:

Map<Long, List<MyBean>> mappedbean = Maps.somethingSomething(myBeanList, toId);

其中 id 不是 bean 上的唯一标识符。

无聊的旧for循环

最佳答案

我不会为此使用 Guava,但 Stream Java 8的API:

import static java.util.stream.Collectors.groupingBy;

final Map<Long, List<MyBean>> mappedbean = myBeanList.stream()
.collect(groupingBy(MyBean::getId));

使用 Guava,您可以:

final Map<Long, Collection<MyBean>> mappedbean = Multimaps.index(myBeanList, toId).asMap();

虽然Multimaps.index返回 ImmutableListMultimap ,来自documentation for ListMultiMap :

The returned map's values are guaranteed to be of type List. To obtain this map with the more specific generic type Map<K, List<V>>, call Multimaps.asMap(ListMultimap) instead.

所以强制转换为 Map<Long, List>总是安全的,事实上你可以这样做:

final Map<Long, List<MyBean>> mappedbean = Multimaps.asMap(Multimaps.index(myBeanList, toId));

获得您想要的确切类型。 (感谢@Xaerxess的提示)

关于java - 使用guava将集合映射到id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29534832/

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