4

2つ与えられたとき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)

OK、両方のリストを手動で繰り返すことでそれを行うことができます。

一方、これはどこのようなにおいがします

  • いくつかの標準機能はXtendまたはguavaまたは
  • いくつかの巧妙なトリックは1行でそれを行います。

Pythonの例では、マップ関数が複数のリストを取得できるため、これは簡単です。

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 に答える