본문 바로가기

강의/TDD, Clean Code with Java 12기

스트림(stream)

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