스트림

    [Java] 람다와 스트림

    🔍 람다식 람다식이란 메서드를 하나의 식으로 표현한 것으로 메서드를 간략하면서도 명확한 식으로 표시할 수 있다는 장점이 있다. 🗝️ 람다식의 기본 형태 메서드에서 반환 타입과 이름을 제거하고 매개변수 선언부와 몸통 사이에 화살표를 추가하면 된다. 반환타입 메서드이름 (매개변수) {} =====> (매개변수) -> { } // Example int max(int a, int b) { return a (int a, int b) -> return a < b? b : a 🗝️ 함수형 인터페이스 자바에서 모든 메서드는 클래스 내에 포함되어야 한다. 즉, 클래스 없이는 함수를 사용할 수 없다는 뜻이다. 그럼에도 불구하고 람다식이 클래스 없이 실행될 수 있는 이유는 람다식은 실제로..

    [Effective Java] 스트림에서는 부작용 없는 함수를 사용하라

    스트림 패러다임 스트림 패러다임의 핵심은 계산을 일련의 변환으로 재구성하는 부분이다. 이때 각 변환 단계는 가능한 한 이전 단계의 결과를 받아 처리하는 순수 함수이여야 한다. 순수 함수 오직 입력만이 결과에 영향을 주는 함수 스트림의 잘못된 사용 예시 Map freq = new HashMap(); try (Stream words = new Scanner(file).tokens()) { words.forEach(word -> { freq.merge(word.toLowerCase(), 1L, Long::sum); }) } 위 코드는 외부 상태(빈도표)를 수정하는 람다를 실행하면서 문제가 생긴다. (merge) forEach 연산은 스트림 계산 결과를 보여주는 일 이상을 하지 않는 것이 좋다. 잘 사용한 예시..