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

时间:2012-04-05 22:06:31

标签: guava xtext xtend

给出两个Iterables

val keys = newLinkedList('foo', 'bar', 'bla')
val vals = newLinkedList(42, 43, 44)

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

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

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

另一方面,这闻起来像是

  • Xtend或番石榴或
  • 中提供了一些标准功能
  • 一些巧妙的技巧将在一行中完成。

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

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

1 个答案:

答案 0 :(得分: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());
    }
});

由A.H。添加:

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

val valsIter = vals.iterator()
val paired = keys.map[ k | k -> valsIter.next ]