java.util.function 패키지

2022. 4. 11. 14:58·자바/람다식

1. java.util.function 패키지

- 이 패키지에는 일반적으로 자주 쓰이는 형식의 메서드를 함수형 인터페이스로 미리 정의해 놓았다.

 

 

- 아래는 대표적 5가지 함수형 인터페이스이다.

(1) java.lang.Runnable

: 매개변수와 반환값이 없다.

<void run()>

 

(2) Supplier<T>

: 매개변수가 없고, 반환값만 있다.

<T get()>

 

(3) Consumer<T>

: 매개변수만 있고, 반환값은 없다.

<void accept(T t)>

 

(4) Function<T,R>

: 일반적인 함수로 하나의 매개변수를 받아서 결과를 반환한다.

<R apply(T t)>

 

(5) Predicate<T>

: 조건식을 표현하는데 사용된다.

: 매개변수는 하나, 반환타입은 boolean이다.

: 반환타입이 boolean인 것을 제외하면 (4) Function과 동일하다.

<boolean test(T t)>

 

 

- 매개변수가 두 개인 함수형 인터페이스는 Consumer, Predicate, Function 앞에 'Bi'를 붙이면

된다.

 

 

 

1-1. Predicate를 이해하기 위한 예제(1)

: 간단하게 s변수에 문자열이 비어있는지 없는지 boolean을 통해 알아보는 예제이다.

 

 

 

 

 

2. 컬렉션 프레임웍과 함수형 인터페이스

- 컬렉션 프레임웍의 인터페이스에 다수의 디폴트 메서드가 추가되었는데,

그 중의 함수형 인터페이스를 사용한다.

( 자세한 메서드 내용은 804p를 참고한다. )

 

 

 

 

2-1. 컬렉션 프레임웍과 함수형 인터페이스를 이해하기 위한 예제(1)

: 아래의 예제는 이전의 사용했던 컬렉션 프레임웍에서 람다식을 이용한 것을 보여준다.

 

 

 

 

 

3. java.lang.function의 함수형 인터페이스를 이해하기 위한 예제(1)

 

 

 

 

3. java.lang.function의 함수형 인터페이스를 이해하기 위한 예제(2)

: 3번 예제(1)과 달리 기본형 타입을 사용하는 함수형 인터페이스이다.

 

(UnaryOperator와 BinaryOperator 함수형 인터페이스는 매개변수의 타입과 반환타입이

모두 일치한다는 점을 제외하고는 Function과 똑같다. )

( 이 둘의 차이점은 매개변수 갯수 차이이다.  전자는 1개 후자는 2개 )

 

( Supplier 부분에서 get()이 아니라 getAsInt()이다. )

( UnaryOperator 부분에서 apply()가 아니라 applyAsInt()이다. )

 

( 위에서 IntUnaryOperator 대신 Function을 넣는다면 에러가 발생한다. )

( 그 이유는 매개변수 a와 반환 값의 타입을 추정할 수 없기 때문이다. )

( 그래서 만약 Function을 넣는다면, 아래와 같이 해야 한다.)

 

Function<Integer, Integer> f = (a) -> 2*a;

//매개변수 타입과 반환 타입은 Integer

또는

IntFunction<Integer> f = (a) -> 2*a;

//매개변수 타입은 int, 반환값은 Integer

 

( 그러나, IntUnaryOperator가 오토박싱과 언박싱의 횟수가 줄어들어 더 성능이 좋다. )

'자바 > 람다식' 카테고리의 다른 글

메서드 참조  (0) 2022.04.12
Function의 합성과 Predicate의 결합  (0) 2022.04.12
함수형 인터페이스  (0) 2022.04.11
람다식의 기본 개념  (0) 2022.04.11
'자바/람다식' 카테고리의 다른 글
  • 메서드 참조
  • Function의 합성과 Predicate의 결합
  • 함수형 인터페이스
  • 람다식의 기본 개념
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      snail
      java.time 패키지
      문자 기반 스트림
      serializable
      file
      java.lang패키지
      map()
      람다식
      InputStream
      선택 정렬
      중간연산
      소켓 프로그래밍
      역직렬화
      알고스팟
      Arrays
      코딩트리조별과제
      불안정 정렬
      스트림
      ServerSocket
      안드로이드 스튜디오
      outputstream
      Collections Framework
      다형성
      TCP 소켓 프로그래밍
      코드트리
      제자리 정렬
      안정 정렬
      유용한 클래스
      코딩테스트
      자바 개념
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    java.util.function 패키지
    상단으로

    티스토리툴바