본문 바로가기
728x90

Stream4

Item 46. 스트림에서는 부작용 없는 함수를 사용하라 스트림 패러다임의 핵심은 계산을 일련의 변환(transformation)으로 재구성하는 것이다. 여기서 각 변환은 가능한 이전 단계의 결과를 받아서 처리하는 순수 함수여야 한다. 이를 위해서는 스트림 연산에 건네는 함수 객체는 모두 side-effect가 없어야 한다. 아래의 예시를 보자. 1 2 3 4 5 6 7 Map freq = new HashMap(); try (Stream words = new Scanner(file).tokens()) { words.forEach(word -> { freq.merge(word.toLowerCase(), 1L, Long::sum); }) } Colored by Color Scripter cs 이 코드는 스트림을 가장한 반복적 코드다. 위에서 명시했듯 스트림에서 사.. 2022. 3. 2.
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.
stream stream은 collection에 있는 데이터를 처리하는 모음이다. 따라서 컬랙션은 데이터를 가지고 있고 스트림은 이 데이터들을 사용해 어떠한 로직을 수행한다. 스트림은 스트림이 처리하는 데이터 소스를 변경하지 않는다. 1 2 3 4 5 6 7 8 9 10 public static void main(String[] args) { List names = new ArrayList(); names.add("keesun"); names.add("toby"); names.add("yunki"); names.stream() .map(String::toUpperCase) .forEach(System.out::println); } Colored by Color Scripter cs 위 코드에서 map을 사용한 직후의.. 2021. 11. 21.
728x90