11

古い for ループ ( for(i = 0, j = 0; i<30; i++,j++)) を 2 つの変数で使用できます Java で for-each ループ (または拡張 for ループ) を 2 つの変数で使用できfor(Item item : items)ますか? その構文は何ですか?

4

6 に答える 6

10

残念ながら、Java は拡張 for ループと呼ばれる初歩的なforeachループしかサポートしていません。他の言語、特に Scala のような FP 言語は、ネストされた反復と途中での要素のフィルタリングを可能にするリスト内包表記(Scala では内包表記と呼ばれます) として知られる構造をサポートしています。

于 2013-08-04T17:11:19.483 に答える
10

いいえ、できません。Iteratorを使用するためのシンタックス シュガーです。この問題に関する適切な回答については、こちらを参照してください。

両方の変数を含むオブジェクトが必要です。

たとえば、Map オブジェクトに表示できます。

for (Map.Entry<String,String> e: map.entrySet()) {
    // you can use e.getKey() and e.getValue() here
}
于 2013-08-04T17:04:37.553 に答える
4

以下は、達成しようとしているのと同じ (パフォーマンス) 効果を持つはずです。

List<Item> aItems = new List<Item>();
List<Item> bItems = new List<Item>();
...
Iterator aIterator = aItems.iterator();
Iterator bIterator = bItems.iterator();
while (aIterator.hasNext() && bIterator.hasNext()) {
    Item aItem = aIterator.next();
    Item bItem = bIterator.next();
}
于 2015-01-24T05:33:33.977 に答える
1

「いいえ」という単純な答えはすでに与えられています。しかし、2 つの反復子を引数として取り、2 つの反復子からの要素のペアを返すように実装できます。ペアは 2 つのフィールドを持つクラスです。それを自分で実装する必要があるか、おそらく一部のApacheコモンズまたは同様のライブラリに存在します。

この新しい Iterator は、foreach ループで使用できます。

于 2013-08-04T18:18:31.443 に答える