7

私は MR ジョブを作成中です。しかし、Iterable オブジェクトに関連する問題で立ち往生しています。そのサイズを見つける必要があります。List オブジェクトにキャストしましたが、それは間違っていました。(List は Iterable にキャストできますが、反転はできません。) 別の方法があります。つまり、オブジェクトに Iterator を使用し、値ごとにカウンターをインクリメントすることです。しかし、それは最適な解決策ではありません。誰かがより良い方法を提案できますか?.

私を助けてください。前もって感謝します。

4

3 に答える 3

15

Collectionインターフェイスはメソッドを提供し、それsize()を拡張しIterableます。イテレータがたまたまコレクションから来ている場合は、そのサイズを尋ねることができます。それ以外の場合は運が悪く、単に最後まで反復する必要があります。

これを実装するハックを次に示します。

public int size(Iterable<?> it) {
  if (it instanceof Collection)
    return ((Collection<?>)it).size();

  // else iterate

  int i = 0;
  for (Object obj : it) i++;
  return i;
}
于 2012-07-10T13:55:05.143 に答える
0

Iterator には size() はありませんが、Iterator の派生元であるコレクションの一部には、java.util.LinkedList.size() のように size() があります。そのため、場合によっては反復する必要があります。

于 2012-07-10T13:56:18.673 に答える