ListSupport 추가
parent
99ab158aa8
commit
97df00b484
@ -0,0 +1,75 @@
|
||||
package cokr.xit.foundation.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.StreamSupport;
|
||||
|
||||
/**List 분할 처리를 위한 유틸리티
|
||||
* @param <T> List 요소 유형
|
||||
* @author mjkhan
|
||||
*/
|
||||
public class ListSupport<T> {
|
||||
private int workSize = 1;
|
||||
private List<T> list;
|
||||
|
||||
/**작업을 위해 list를 분할했을 때 각 분할이 갖는 요소들의 최대 갯수
|
||||
* @param workSize 각 분할이 갖는 요소들의 최대 갯수
|
||||
* @return 현재 ListSupport
|
||||
*/
|
||||
public ListSupport<T> setWorkSize(int workSize) {
|
||||
if (workSize < 1)
|
||||
throw new IllegalArgumentException("workSize < 1");
|
||||
|
||||
this.workSize = workSize;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**List로 변환할 Collection을 설정한다.
|
||||
* @param iterable Collection
|
||||
* @return 현재 ListSupport
|
||||
*/
|
||||
public ListSupport<T> setIterable(Iterable<T> iterable) {
|
||||
this.list = iterable instanceof List<T> ?
|
||||
(List<T>)iterable :
|
||||
StreamSupport.stream(iterable.spliterator(), false).toList();
|
||||
return this;
|
||||
}
|
||||
|
||||
/**지정한 function으로 분할한 List를 순차적으로 처리한다.
|
||||
* @param consumer 분할한 List를 처리할 function
|
||||
*/
|
||||
public void consume(Consumer<List<T>> consumer) {
|
||||
int size = list == null ? 0 : list.size();
|
||||
if (size < 1) return;
|
||||
|
||||
int from = 0;
|
||||
while (from <= size - 1) {
|
||||
int to = from + workSize;
|
||||
List<T> subList = list.subList(from, Math.min(to, size));
|
||||
consumer.accept(subList);
|
||||
from = to;
|
||||
}
|
||||
}
|
||||
|
||||
/**설정한 Collection을 지정한 workSize의 크기로 분할한 List로 반환한다.
|
||||
* @return List
|
||||
*/
|
||||
public List<List<T>> split() {
|
||||
ArrayList<List<T>> result = new ArrayList<>();
|
||||
consume(result::add);
|
||||
return result;
|
||||
}
|
||||
/*
|
||||
public static void main(String[] args) {
|
||||
List<String> list = List.of("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k");
|
||||
ListSupport<String> support = new ListSupport<String>()
|
||||
.setWorkSize(3)
|
||||
.setIterable(list);
|
||||
|
||||
for (List<String> subList: support.split())
|
||||
System.out.println(subList);
|
||||
support.consume(System.out::println);;
|
||||
}
|
||||
*/
|
||||
}
|
Loading…
Reference in New Issue