많은 수의 요소가있는 목록이 있습니다. 이 목록을 처리하는 동안, 어떤 경우에는 목록을 더 작은 하위 목록으로 분할하고 일부 경우 전체 목록을 처리하려고합니다.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