map, filter, reduce
Collection에 담긴 데이터를 처리하려면 Collection을 순회하면서 각 Element를 처리하는 것이 일반적이다. 앞으로는 순회하는 것을 잊고, Element 처리에만 집중하자.
filter
요구사항은 파일 문자 중 길이가 12보다 큰 문자의 수를 구한다.
// nextstep.fp.StreamStudy countWords method
String contents = new String(Files.readAllBytes(
Paths.get("../ war-and-peace.txt")), StandardCharsets.UTF_8);
List<String> words = Arrays.asList(contents.split("[\\P{L}]+"));
long count = 0;
for (String w : words) {
if (w.length() > 12) count++;
}
filter 활용해 구현
String contents = new String(Files.readAllBytes(
Paths.get("../alice.txt")), StandardCharsets.UTF_8);
List<String> words = Arrays.asList(contents.split("[\\P{L}]+"));
long count =
words.stream().filter(w -> w.length() > 12).count();
map
List에 담긴 모든 숫자 값을 2배한 결과 List를 생성한다.
// nextstep.fp.StreamStudy 클래스의 doubleNumbers method 참고
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> dobuleNumbers =
numbers.stream().map(x -> 2 * x).collect(Collectors.toList());
reduce
List에 담긴 모든 숫자의 합을 구한다.
// nextstep.fp.StreamStudy 클래스의 sumAll method 참고
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
public int sumAll(List<Integer> numbers) {
return numbers.stream().reduce(0, (x, y) -> x + y);
}
'강의 > TDD, Clean Code with Java 12기' 카테고리의 다른 글
옵셔널 (0) | 2021.08.25 |
---|---|
스트림 실습 (0) | 2021.08.25 |
람다 실습 2 - 람다를 활용해 중복 제거 (0) | 2021.08.25 |
람다 실습 1 - 익명 클래스를 람다로 전환 (0) | 2021.08.25 |
람다 (0) | 2021.08.25 |