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