(Java) FlatMap으로 요소 무시하기
기본적으로 map은 요소를 무시하지 못하기 때문에 조건에 맞지 않는 애들은 아래와 같이 필터링 해줘야한다.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15public class Ttest {
public void test() {
List<Integer> numbers = Lists.newArrayList(1, 2, 3, 4);
List<String> strings = numbers.stream()
.map(integer -> (integer % 2 == 0) ? integer + "" : null)
.filter(Objects::nonNull)
.collect(toList());
assertThat(strings.size(), is(2));
assertThat(strings.get(0), is("2"));
assertThat(strings.get(1), is("4"));
}
}
하지만 flatMap을 쓰면 null을 리턴하지 않고, filter를 태우지 않고도 원하는 결과를 만들 수 있다.1
2
3
4
5
6
7
8
9
10
11
12
13
14public class Ttest {
public void test() {
List<Integer> numbers = Lists.newArrayList(1, 2, 3, 4);
List<String> strings = numbers.stream()
.flatMap(integer -> (integer % 2 == 0) ? Stream.of(integer + "") : Stream.empty())
.collect(toList());
assertThat(strings.size(), is(2));
assertThat(strings.get(0), is("2"));
assertThat(strings.get(1), is("4"));
}
}