私は多数の要素を持つリストを持っています。このリストを処理しているときに、リストをより小さなサブリストに分割したい場合があり、場合によってはリスト全体を処理したいことがあります。Java:処理のためにListのチャンクを作成する
private void processList(List<X> entireList, int partitionSize)
{
Iterator<X> entireListIterator = entireList.iterator();
Iterator<List<X>> chunkOfEntireList = Iterators.partition(entireListIterator, partitionSize);
while (chunkOfEntireList.hasNext()) {
doSomething(chunkOfEntireList.next());
if (chunkOfEntireList.hasNext()) {
doSomethingOnlyIfTheresMore();
}
}
私は、パーティションを作成するためにcom.google.common.collect.Iteratorsを使用しています。だから私はサイズ100でリストを分割したい場合はドキュメントhere のリンクは、私は、リストのチャンクを作成したくないとき、私は整数を渡すと考えていた、今
processList(entireList, 100);
を呼び出します。 partitionSizeとしてMAX_VALUE
processList(entireList, Integer.MAX_VALUE);
しかし、これによりコードがメモリ不足になります。誰かが私を助けることができますか?私は何が欠けていますか?イテレータは内部的に何をしていますか?これをどのように克服できますか?
EDIT:さらに処理するリストがある場合にのみ、何かを行うには「if」節が必要です。つまり、iteratorのhasNext()関数が必要です。
私はこれを行うと考えました。しかし、それは私の場合にはコードが非常に醜いものにします。 Iterators.partition()とは別の方法で試すことができる代替ソリューションがありますか? –
あなたはpartiotionメソッドを作成することができます..そのメソッドでは、2つの提案されたソリューションのいずれかを実装することができます。それはコードを醜いものにしません – stinepike