본문 바로가기
728x90

도서/모던 자바 인 액션10

Chapter 6. 스트림으로 데이터 수집 중간 연산은 파이프라인을 구성해 스트림의 요소를 소비(consume)하지 않는다. 반면 최종 연산은 스트림의 요소를 소비해 최종 결과를 도출한다. 최종 연산은 스트림 파이프라인을 최적화해 계산 과정을 짧게 생략하기도 한다. 컬렉터란 무엇인가? 최종 연산인 collect 메서드는 Collector 인터페이스의 구현을 전달받아 스트림의 요소를 어떤 식으로 도출할지 지정한다. 예를 들어 .collect(Collectors.toList())에서 toList는 스트림을 리스트로 변환해 Collector를 반환한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 // Stream interface 의 collect R collect(.. 2022. 3. 1.
5장. 스트림 활용 스트림은 내부 반복을 사용하고 있기 때문에 스트림 API가 내부에서 데이터를 처리하는 방식을 관리한다. 따라서 내부적으로 다양한 최적화가 이루어질 수 있다. 이번 장에서는 자바 8, 9에서 추가된 스트림 연산을 살펴본다. 필터링 스트림에서 필요한 요소만 선택하는 방법이다. 프레디케이트로 필터링 스트림 인터페이스에서 지원하는 filter 메서드는 프레디케이트를 인수로 받아 프레디케이트와 일치하는 요소를 포함하는 스트림을 반환한다. 1 2 3 4 List oddNumbers = numbers.stream() .filter(number -> number % 2 != 0) .collect(toList()); Colored by Color Scripter cs 고유 요소 필터링 고유(unique)한 값만 추출하길.. 2022. 2. 18.
4장 스트림 소개 많은 자바 애플리케이션에서 컬랙션을 사용한다. 하지만 컬랙션 관련 연산들은 연산을 통해 기대하는 것에 집중하기 보다는 구현을 어떻게 할지를 명시해야 한다. 또 한 많은 요소를 포함한 컬랙션을 처리할 경우 병렬 처리가 효과적이지만 병렬 처리 코드를 구성하는 것은 단순 반복 처리 코드에 비해 복잡하고 디버깅이 어렵다. 이런 문제들에 대한 해결책이 스트림이다. 스트림이란 무엇인가? 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있고 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. 또 한 여러 빌딩 블록 연산을 연결해 복잡한 데이터 처리 파이프라인을 만들 수 있다. 연산이 복잡함에도 가독성은 유지된다. 스트림에서 filter 같은 연산은 고수준 빌딩 블록(high-level.. 2022. 2. 16.
3장. 람다 표현식 동작 파라미터화를 이용하면 더 유연하고 재사용할 수 있는 코드를 만들 수 있다. 익명 클래스로 다양한 동작을 구현할 수 있지만 코드가 깔끔하지 않다. 깔끔하지 않다는 것은 실전에 적용하는 것을 막는 요소다. 그에 반해 람다는 익명 클래스처럼 이름이 없는 함수면서 메서드를 인수로 전달할 수 있고 코드 역시 깔끔하다. 이번 장에서는 람다에 대해 다룬다. 람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이다. 람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 예외 리스트를 가질 수 있다. 람다 특징은 다음과 같다. 1. 익명: 람다는 이름이 없다. 따라서 구현해야 할 코드에 대한 걱정이 준다. 2. 함수: 람다는 메서드처럼 특정 클래스에 종속되지 않기 때문에.. 2022. 2. 14.
728x90