본문 바로가기
JAVA

람다와 스트림

by moonstal 2022. 3. 10.

- 람다식: 함수(메서드)를 간단한 식으로 표현  

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