List를 고정 개수로 나누려면 Guava의 Lists.partition()을 쓰는 게 가장 좋다. stream을 쓰려면 따로 좀 복잡하게 만들어야 한다.
List<Integer> list = ...;
List<List<Integer>> subLists = Lists.partition(list, 10);
처음에는 stream의 partitionBy와 좀 혼동했었다. 특정 조건(predicate)에 의해서 쪼개려면 Collectors.paritioningBy를 사용한다.
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;. @Test
public void test() {
Predicate<String> isFive = p -> p.length() == 5;
Map<Boolean, List<String>> list = Arrays.asList("samuel", "flynn", "merlin")
.stream()
.collect(Collectors.partitioningBy(isFive));
System.out.println(list);
}
결과
{false=[samuel, merlin], true=[flynn]}
groupingBy라는 있는데, 역시 Predicate대신 Function을 매개변수로 받는다. 결과는 동일하게 처리할 수 있다.
@Test
public void test() {
Function<String, Boolean> isFive = p -> p.length() == 5;
Map<Boolean, List<String>> list = Arrays.asList("samuel", "flynn", "merlin")
.stream()
.collect(Collectors.groupingBy(isFive));
System.out.println(list);
}
결과는 동일하다.
'java core' 카테고리의 다른 글
java8 ThreadLocal 초기화 (0) | 2015.12.14 |
---|---|
[java8] List<Object>를 List<String>으로 변환하기 (0) | 2015.11.19 |
java8 소스 보기 (0) | 2015.10.19 |
자바 null casting 주의 사항 (0) | 2015.10.02 |
[java8] 배열을 java8 stream 처리하기 (0) | 2015.09.24 |