- 람다식: 함수(메서드)를 간단한 식으로 표현
new Object(){
int max(int a, int b){
return a>b? a:b;
}
}
(a,b)->a>b?a:b
함수는 클래스에 독립적, 메서드(자바)는 클래스에 종속적
반환값이 있는 경우, 식이나 값만 적고 return문 생략가능 ;안붙임
매개변수 타입 생략가능
람다식은 익면 함수가 아니라 익명 객체이다.
람다식(익명 객체)을 다루기 위한 참조변수가 필요 참조변수 타입은?
- 함수형 인터페이스: 단하나의 추상메서드만 선언된 인터페이스
interface MyFuntion{
public abstract int max(int a, int);
}
MyFunction f = new MyFunction(){
public int max(int a, int b){
return a>b?a:b;
}
}
// MyFunction f = (a,b)->a>b?a:b
int value = f.max(3,5);
- java.util.function패키지: 자주사용되는 다양한 함수형 인터페이스를 제공
- predicate의 결합: 조건식->불린
- 메서드 참조: 하나의 메서드만 호출하는 람다식은 메서드참조로 간단히 할 수 있다.
클래스이름::메서드이름
Function<String,Integer> f = (String s)-> Integer.parseInt(s);
Function<string,integer> f =Integer::parseInt;
- 생성자의 메서드 참조
Supplier<MyClass> s= ()->new MyClass();
Supplier<MyClass> s= MyClass::new;
Function<Integer,int[]> f = x->new int[x]; 람다식
Function<Integer,int[]> f2 = int[]::new; 메서드 참조
- 스트림: 다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것
스트림만들기-> 중간연산(n번)-> 최종연산(0,1번)
stream.distinct().limit(5).sorted().forEach(System.out::println)
스트림은 데이터소스로부터 데이터를 읽기만할 뿐 변경하지 않는다.
일회용임
최종연산전까지 중간연산이 수행되지 않는다.-지연된 연산
스트림은 작업을 내부 반복으로 처리 stream.forEach(System.out::println);
스트림의 작업을 병렬로 차리 병렬스트림
- 기본형스트림-IntStream, LongStream,DoubleStream
오토박싱 언박싱의 비효율이 제거됨(Stream<Integer>대신 IntStream사용)
숫자와 관련된 유용한 메서드를 Stream<T>보다 더 많이 제공
- 스트림이 제공하는 기능: 중간연산과 최종연산
- Optional<T> T타입 객체의 래퍼클래스
null직접 다루는 것은 위험
null체크 if문 코드 지저분
- collect()와 Collectors
collect()는 Collector를 매개변수로 하는 스트림의 최종연산
'JAVA' 카테고리의 다른 글
자바 플레이그라운드 with TDD, 클린코드 (0) | 2022.04.07 |
---|---|
접근제어자와 static (0) | 2022.03.30 |
쓰레드 (0) | 2022.03.10 |
지네릭스, 열거형, 애너테이션 (0) | 2022.03.09 |
컬렉션 프레임웍 (0) | 2022.03.08 |