gpt4 book ai didi

java - 使用 Guava 将两个列表压缩到 Java 8 中的不可变多重映射中?

转载 作者:搜寻专家 更新时间:2023-11-01 01:24:45 24 4
gpt4 key购买 nike

for 循环看起来像

ImmutableListMultiMap.<Key, Value>Builder builder 
= ImmutableListMultiMap.<Key, Value>newBuilder();
for (int i = 0; i < Math.min(keys.length(), values.length()); i++) {
builder.put(keys.at(i), values.at(i));
}

Guava/Java 8 可能的第一步是

Streams.zip(keys, values, zippingFunction)

我认为 zippingFunction 需要返回一个映射条目,但没有一个可公开构建的列表条目。所以我能写出的“最”实用的方法是使用一个压缩函数返回一个 Pair,我不确定它是否存在于 Guava 中,或者返回一个双元素列表,这是一个可变类型,在那里没有正确地表示恰好是 2 个元素。

如果我可以创建一个 map 条目,这将是理想的:

Streams.zip(keys, values, zippingFunction)
.collect(toImmutableListMultimap(e -> e.getKey(), e.getValue())

这似乎是最好的方法,但这是不可能的,而且压缩到条目中和从条目中解压缩似乎仍然是迂回的。有没有办法使这成为可能或可以改进它?

最佳答案

如果您的列表是随机访问的,则无需压缩即可:

Map<Key, Value> map = IntStream.range(0, Math.min(keys.size(), values.size()))
.boxed()
.collect(toImmutableListMultimap(i -> keys[i], i -> values[i]));

关于java - 使用 Guava 将两个列表压缩到 Java 8 中的不可变多重映射中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49261805/

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