使用Guava将两个列表压缩到Java 8中的不可变多图中?

dje*_*lin 4 java functional-programming multimap guava java-8

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));
}
Run Code Online (Sandbox Code Playgroud)

Guava/Java 8中可能的第一步是

Streams.zip(keys, values, zippingFunction)
Run Code Online (Sandbox Code Playgroud)

我认为zippingFunction需要返回一个map条目,但是没有可公开构建的列表条目.因此,我可以编写的"最"功能方式是使用压缩函数返回一个Pair,我不确定它是否存在于Guava中,或者返回一个两元素列表,这是一个可变类型,在那里没有正确地说明正是2个元素.

如果我可以创建一个映射条目,那将是理想的:

Streams.zip(keys, values, zippingFunction)
.collect(toImmutableListMultimap(e -> e.getKey(), e.getValue())
Run Code Online (Sandbox Code Playgroud)

这似乎是最好的方式,除非它不可能,并且拉入条目并从条目解压缩仍然看起来很迂回.有没有办法使这成为可能或一种可以改进的方式?

Fed*_*ner 5

如果您的列表是随机访问,您可以不用压缩:

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

  • 这对于更简单的场景来说真的是一个合理的解决方案.:) (3认同)