java8 5

자바 기본서를 다시 읽다. 8 - 스트림의 중간처리 메소드

스트림은 기본적으로 중간처리 메소드와 최종처리 메소드로 이루어진 파이프라인으로 활용할 수 있다고 이전에 알아보았다. 그렇다면 중간처리와 최종 처리시 각각 활용할 수 있는 메소드들에 어떤 것들이 있는지 알아보자. 스트림의 중간처리 메소드 distinct(), filtering() 첫번째로, 중복 데이터를 걸러내는 distinct(), 특정 기준으로 데이터를 걸러주는 filtering()에 대해 알아보자. List list = Arrays.asList("윤가영","김나영","윤다영","김라영","윤마영","윤가영"); list.stream() .distinct() // 중복제거 .filter(n-> n.contains("윤")) // 조건 .forEach(s-> System.out.println("name ..

Study/Java 2022.04.06

자바 기본서를 다시 읽다. 6 - 메소드 참조

메소드 참조 메소드 참조란, 메소드를 참조하여 매개변수의 정보 및 리턴 타입을 알아내어 람다식에서 불필요한 매개변수를 제거하는 것이다. 예를들어 아래와 같은 코드가 있을 때, 람다식은 단순히 두개의 값을 Math.max() 메소드의 매개값으로 전달하는 역할만 한다. ( o1 , o2 ) -> Math.max(o1, o2); 이는 메소드 참조를 통해 아래와 같이 간결하게 변환할 수 있다. IntBinaryOperator operator = Math :: max; 정적 메소드와 인스턴스 메소드 참조 정적메소드와 인스턴스 메소드를 참조하는 방식은 다음과 같다. 정적 메소드 - 클래스::메소드 인스턴스 메소드 - 참조변수::메소드 import java.util.function.IntBinaryOperator; ..

Study/Java 2022.03.29

자바 기본서를 다시 읽다. 5 - 함수적 인터페이스의 Default Method

4강에서 알아보았던 함수적 인터페이스들은 andThen()과 compose()라는 디폴트 메소드를 가지고 있다. 이 디폴트 메소드들은 첫번째 메소드의 처리결과를 두번째 메소드의 매개값으로 넘겨주지만, 인터페이스AB = 인터페이스A.andThen(인터페이스B); or 인터페이스AB = 인터페이스B.andThen(인터페이스A); 최종결과 = 인터페이스AB.method(); 위와같이 인터페이스 AB 의 method()를 호출하기 위해 매개값으로 인터페이스 A와 B의 연산값을 넘겨준다면 andThen은 인터페이스A 호출 -> 인터페이스B 호출 compose는 인터페이스B 호출 -> 인터페이스A 호출을 먼저 한다. Consumer와 Function API를 사용한 코드를 통해 알아보자. import java.ut..

Study/Java 2022.03.27

자바 기본서를 다시 읽다. 4 - 표준 API의 함수적 인터페이스

자바 8에서부터는 빈번하게 사용되는 함수적 인터페이스(Functional Interface)는 java.util.function 표준 API 패키지로 제공한다. 이 패키지에서 제공하는 함수적 인터페이스의 목적은 메소드 또는 생성자의 매개 타입으로 사용되어 람다식을 대입할 수 있게 함이다. 함수적 인터페이스는 크게 Consumer, Supplier, Function , Operator, Predicate로 나뉘는데 각각의 특징은 아래와 같다. Consumer : 매개값 O , 리턴값 X Supplier : 매개값 X, 리턴값 O Function : 매개값 -> 리턴값으로 타입 변환 Operator : 매개값 -> 리턴값으로 값 연산 Predicate : 매개값 -> true/false 리턴 Consumer..

Study/Java 2022.03.16

자바 기본서를 다시 읽다. 3 - 로컬클래스와 익명객체, 그리고 람다식 (2)

이제 람다식을 정리해보자. 앞서 로컬클래스와 이름 없이 사용하는 로컬클래스인 익명 객체에 대해 알아보았다. 그리고 이 람다식은 런타임시 익명객체를 생성해주는 함수 생성 식이다. 이를 사용하면 자바 코드가 매우 간결해주고 컬렉션의 요소를 필터링하거나 매핑해서 원하는 결과를 쉽게 집계할 수 있다. 람다식은 아래와 같이 인터페이스 변수 = 람다식의 형태로 작성된다. Runnable runnable = () -> {}; 이렇게 보면 자바의 메소드를 선언하는 것 처럼 보이지만, 자바는 메소드만을 단독으로 생성할 수 없고, 항상 클래스의 구성 멤버로 선언하기 때문에 자바는 이 메소드를 가지는 객체를 생성하고 인터페이스 변수에 대입된다. 위 코드는 Runnable 변수에 대입되므로 람다식은 Runnable 익명 구현..

Study/Java 2022.03.15