gpt4 book ai didi

java - Guava :如何自定义减少多图?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:12:51 25 4
gpt4 key购买 nike

reduce 的概念是否在 Guava 库中实现?我的意思是我有一个多图:

[1] -> 1, 2, 5, 8
[2] -> 3, 6, 4
[3] -> 1, 0

然后我有一个乘法函数:

(a, b) -> a * b

我想得到下面的 map :

[1] -> 80          // 1 * 2 * 5 * 8
[2] -> 72 // 3 * 6 * 4
[3] -> 0 // 1 * 0

我如何在 Guava 中做到这一点?

最佳答案

我觉得Guava里面没有归约操作。我猜你有两个选择。

如果您使用 ,只需流过条目集,并将条目收集到一个新 map 中 groupingByreduce .

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

...

Map<Integer, Integer> map =
multimap.entries()
.stream()
.collect(groupingBy(Map.Entry::getKey,
reducing(1, Map.Entry::getValue, (a, b) -> a * b)));

groupingBy您可以猜到,将按条目的键值对条目进行分组。然后我们通过首先将它们映射到它们的值,最后将它们相乘来减少分组的值(即 Entry<Integer, Integer> )——为乘法提供标识值 1。


如果你不能使用 ,你可以得到一个 Map<Integer, Collection<Integer>>来自你的 MultimapMultimaps.asMap并使用 Maps.transformValues :

Map<Integer, Collection<Integer>> tempMap = Multimaps.asMap(oldMap);
Map<Integer, Integer> newMap =
Maps.transformValues(tempMap, new Function<Collection<Integer>, Integer>() {
@Nullable
@Override
public Integer apply(Collection<Integer> input) {
//do the multiplication here
return 0;
}
});

关于java - Guava :如何自定义减少多图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33215032/

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