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
Posted by '김용환'
,