我有一個包含大量元素的列表。在處理這個列表時,在某些情況下,我希望將列表分割成更小的子列表,並且在某些情況下我想處理整個列表。Java:創建用於處理的列表塊
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);
現在,當我不想創建列表的塊,我想我可以通過整型。 MAX_VALUE作爲partitionSize。
processList(entireList, Integer.MAX_VALUE);
但是,這導致我的代碼出去的內存。有人可以幫我嗎?我錯過了什麼?什麼是迭代器在內部做什麼,我該如何克服這一點?
編輯:我還需要內部的「if」子句做些事情,只有當有更多的列表要處理。即我需要迭代器的hasNext()函數。
我認爲這樣做。但是這讓我的代碼變得非常難看。除了Iterators.partition()之外,還有其他解決方案可以嘗試嗎? –
你可以創建一個partiotion方法..然後在那個方法中你可以實現任何2個建議的解決方案。它不會讓代碼變得醜陋 – stinepike