4

当给两个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 或 guava 中提供了一些标准功能或
  • 一些巧妙的技巧将在一行中完成。

对于 Python 中的示例,这将是显而易见的,因为它们的map函数可以采用多个列表。

如何使用带有最少代码的 Xtend2+ 来解决这个问题?

4

1 回答 1

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());
    }
});

AH添加:

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

val valsIter = vals.iterator()
val paired = keys.map[ k | k -> valsIter.next ]
于 2012-04-05T22:22:05.390 回答