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);
}

결과는 동일하다.




Posted by 김용환 '김용환'

댓글을 달아 주세요