728x90
반응형
JAVA List
지정 크기로
분할하기
Guava를 이용한 List분할
- 먼저 Guava 라이브러리를 다운받는다.
Guava: Google Core Libraries For Java
- 사용방법은 다음과 같다.
Lists.partition( 대상 리스트, 분할할 크기 )
package yourusername;
import java.util.Arrays;
import java.util.List;
import com.google.common.collect.Lists;
public class TEST {
private static List<String> list = Arrays.asList(
"A1","A2","A3", "A4", "A5",
"B1","B2","B3", "B4", "B5",
"C1","C2","C3", "C4", "C5",
"D1","D2","D3", "D4", "D5",
"E1","E2","E3", "E4", "E5"
);
public static void main(String[] args) {
int cnt = 5;
List<List<String>> splitLists = Lists.partition(list, cnt);
System.out.println(splitLists);
}
}
- 분할 전
[A1, A2, A3, A4, A5, B1, B2, B3, B4, B5, C1, C2, C3, C4, C5, D1, D2, D3, D4, D5, E1, E2, E3, E4, E5]
- 분할 후
[[A1, A2, A3, A4, A5], [B1, B2, B3, B4, B5], [C1, C2, C3, C4, C5], [D1, D2, D3, D4, D5], [E1, E2, E3, E4, E5]]
Guava를 이용한 Collection 분할
- Guava를 이용하여 Collection 분할도 가능하다
- 사용방법은 다음과 같다.
Iterables.partition( 대상 리스트, 분할할 크기 );
package yourusername;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
public class TEST {
private static List<String> list = Arrays.asList(
"A1","A2","A3", "A4", "A5",
"B1","B2","B3", "B4", "B5",
"C1","C2","C3", "C4", "C5",
"D1","D2","D3", "D4", "D5",
"E1","E2","E3", "E4", "E5"
);
public static void main(String[] args) {
int cnt = 5;
Collection<String> intCollection = Lists.newArrayList(list);
Iterable<List<String>> splitIterable = Iterables.partition(intCollection, cnt);
System.out.println(splitIterable);
}
}
- 분할 전
[A1, A2, A3, A4, A5, B1, B2, B3, B4, B5, C1, C2, C3, C4, C5, D1, D2, D3, D4, D5, E1, E2, E3, E4, E5]
- 분할 후
[[A1, A2, A3, A4, A5], [B1, B2, B3, B4, B5], [C1, C2, C3, C4, C5], [D1, D2, D3, D4, D5], [E1, E2, E3, E4, E5]]
Apache Commons Collections을 이용한 List 분할
- Apache Commons Collections의 최신 릴리스에 List 분할 지원이 추가되었다.
https://issues.apache.org/jira/browse/COLLECTIONS-393
#Test 프로젝트 버전
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
- 사용방법은 다음과 같다.
ListUtils.partition( 대상 리스트, 분할할 크기 )
package yourusername;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.collections4.ListUtils;
public class TEST {
private static List<String> list = Arrays.asList(
"A1","A2","A3", "A4", "A5",
"B1","B2","B3", "B4", "B5",
"C1","C2","C3", "C4", "C5",
"D1","D2","D3", "D4", "D5",
"E1","E2","E3", "E4", "E5"
);
public static void main(String[] args) {
int cnt = 5;
List<List<String>> subSets = ListUtils.partition(list, cnt);
System.out.println(subSets);
}
}
Java 8 Collectors.groupingBy() 를 이용한 List분할
- 외부 라이브러리를 사용할 필요없다.
- 사용방법은 다음과 같다.
대상리스트.stream().collect(Collectors.groupingBy(s -> (대상리스트.indexOf(s) / 분할할 크기)));
-----------------------------------------------
그룹핑 조건
- Collectors.groupingBy() 함수의 리턴값은 Map이기 때문에 List로 변환시켜줘야한다.
package yourusername;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class TEST {
private static List<String> list = Arrays.asList(
"A1","A2","A3", "A4", "A5",
"B1","B2","B3", "B4", "B5",
"C1","C2","C3", "C4", "C5",
"D1","D2","D3", "D4", "D5",
"E1","E2","E3", "E4", "E5"
);
public static void main(String[] args) {
int cnt = 5;
Map<Integer, List<String>> groups =
list.stream().collect(Collectors.groupingBy(s -> (list.indexOf(s) / cnt)));
List<List<String>> subSets = new ArrayList<List<String>>(groups.values());
System.out.println(subSets);
}
}
728x90
반응형