map, reduce, filter 실습 1
List에 담긴 모든 숫자 중 3보다 큰 숫자를 2배 한 후 모든 값의 합을 구한다.
지금까지 학습한 map, reduce, filter를 활용해 구현해야 한다.
- nextstep.fp.StreamStudyTest 클래스의 sumOverThreeAndDouble() 테스트를 pass해야 한다.
구현 결과
public static long sumOverThreeAndDouble(List<Integer> numbers) {
return numbers.stream()
.filter(integer -> integer > 3)
.map(integer -> integer * 2)
.reduce(0, (x,y) -> x + y);
}
map, reduce, filter 실습 2
nextstep.fp.StreamStudy 클래스의 printLongestWordTop100() 메서드를 구현한다. 요구사항은 다음과 같다.
- 단어의 길이가 12자를 초과하는 단어를 추출한다.
- 12자가 넘는 단어 중 길이가 긴 순서로 100개의 단어를 추출한다.
- 단어 중복을 허용하지 않는다. 즉, 서로 다른 단어 100개를 추출해야 한다.
- 추출한 100개의 단어를 출력한다. 모든 단어는 소문자로 출력해야 한다.
힌트
- 단어의 길이가 12자를 초과하는 단어를 추출한다.
- 12자가 넘는 단어 중 길이가 긴 순서로 100개의 단어를 추출한다.
- sorted() method 활용
- 단어 중복을 허용하지 않는다. 즉, 서로 다른 단어 100개를 추출해야 한다.
- distinct() method 활용
- 추출한 100개의 단어를 출력한다. 모든 단어는 소문자로 출력해야 한다.
- String.toLowerCase() method 활용
구현 결과
public static void printLongestWordTop100() throws IOException {
String contents = new String(Files.readAllBytes(Paths
.get("src/main/resources/fp/war-and-peace.txt")), StandardCharsets.UTF_8);
List<String> words = Arrays.asList(contents.split("[\\P{L}]+"));
// TODO 이 부분에 구현한다.
words.stream()
.filter(word -> word.length() > 12)
.sorted(Comparator.comparing(String::length).reversed())
.distinct()
.map(String::toLowerCase)
.forEach(System.out::println);
}
'강의 > TDD, Clean Code with Java 12기' 카테고리의 다른 글
자동차 게임 프로젝트 - 강의 정리 (0) | 2021.09.03 |
---|---|
옵셔널 (0) | 2021.08.25 |
스트림(stream) (0) | 2021.08.25 |
람다 실습 2 - 람다를 활용해 중복 제거 (0) | 2021.08.25 |
람다 실습 1 - 익명 클래스를 람다로 전환 (0) | 2021.08.25 |