使用标准库 - 或 - 映射与多个Iterables组合两个Iterables

A.H*_*.H. 4 xtext guava xtend

给两个时 Iterables

val keys = newLinkedList('foo', 'bar', 'bla')
val vals = newLinkedList(42, 43, 44)
Run Code Online (Sandbox Code Playgroud)

我想关联两个列表中的每个项目,如下所示:

val Iterable<Pair<String, Integer>> expected 
    = newLinkedList('foo'->42, 'bar'->43, 'bla'->44)
Run Code Online (Sandbox Code Playgroud)

好的,我可以手动迭代两个列表.

另一方面,这闻起来像是在哪里

  • 某些标准功能可用于Xtend或番石榴或
  • 一些巧妙的技巧将在一行中完成.

对于Python中的示例,这将是一个明智的选择,因为它们的map函数可以采用多个列表.

如何使用Xtend2 +和miniumum代码解决这个问题?

And*_*ejs 7

final Iterator it = vals.iterator();
expected = Iterables.transform(keys, new Function<String, Pair>() {
    public Pair apply(String key) {
        return new Pair(key, it.next());
    }
});
Run Code Online (Sandbox Code Playgroud)

由AH添加:

在Xtend中,这看起来像这样:

val valsIter = vals.iterator()
val paired = keys.map[ k | k -> valsIter.next ]
Run Code Online (Sandbox Code Playgroud)