메서드의 매개변수에 사용되는 함수적 인터페이스
- 자주 사용하는 기능을 정의 할 수 있는 함수 제공
Consumer<T> | Supplier<T> | Predicate<T> | Function<T,R> | |
---|---|---|---|---|
입력 | O | X | T타입 | |
출력 | X | O | T/F | R타입 |
설명 | 입력에 대한 T/F 반환 | T타입을 R타입으로 변환 |
Consumer<T> | Supplier<T> | Predicate<T> | Function<T,R> |
---|---|---|---|
BooleanSupplier | |||
IntConsumer | IntSupplier | IntPredicate | IntFunction |
LongConsumer | LongSupplier | LongPredicate | LongFunction |
DoubleConsumer | DoubleSupplier | DoublePredicate | DoubleSupplier |
BiConsumer<T,U> | BiPredicate<T,U> | BiFunction<T,U,R> |
IntConsumer<T>
: 입력은 Int형이지만 출력은 없음BooleanSupplier
: 입력은 없지만 출력이 Boolean 형BiFunction<T,U,R>
: 입력은 T와 U 타입이지만 R 타입으로 출력Function<T,R>
확장형 추가 : ToInt
Function<T>
, ToLong
Function<T>
, ToDouble
Function<T>
, UnaryOperator<T>
XXXOperator 은 입력 매개변수의 연산 결과가 동일한 타입으로 리턴하는 기능
- Function<T, R> 에서 R이 T 로 바뀌었다고 같다.
- 사실 Function 인터페이스를 상속한 것이다.
ex)public interface UnaryOperator<T> extends Function<T, T>
Consumer<T>
함수적 인터페이스interface Consumer<T> {
public abstract void accept(T t);
}
// 익명이너클래스
Consumer<String> c = new Consumer<String>(){
@Override
public void accept(String t){
System.out.println(t);
}
}
// 람다식
Consumer<String> c1;
c1 = (word)->System.out.println(word);
c1.accept("테스트 입니다. ");
Consumer<T>
함수적 인터페이스IntConsuer c2 = (num)->System.out.println("값 : "+num);
BiConsuer<String, Integer> c3 = (name, age)->System.out.println("이름 : "+name+ "나이 : "+age);
c2.accept(3);
c3.accept("진진자라", 10);
리턴타입이 기본자료형이 아니거나, 확장형 인터페이스의 리턴타입이 모두 동일한 경우
인터페이스 메서드명은 동일!
Consumer<T>
는 모두 accept()리턴 타입이 기본자료형이면서 서로 다른 타입을 갖고 있을 때 메서드 명은 다를 수 있다!
Supplier<T>
함수정 인터페이스getAsBoolean();
getAsInt();
getAsLong();
getAsDouble();
리턴타입이 기본자료형이면서, 확장형 인터페이스의 리턴타입이 다른 경우
인터페이스 메서드명은 다름!
기본메서드AS리턴타입명
표준형 Predicate<T> 함수정 인터페이스
interface Predicate<T>{
public abstract boolean test(T t);
}
Predicate<String> p1;
p1 = (word)->(word.length()>1) ? true : false;
System.out.println(p1.test("안녕");
리턴타입이 기본자료형이 아니거나, 확장형 인터페이스의 리턴타입이 모두 동일한 경우
인터페이스 메서드명은 동일함!
확장형 Predicate<T>
는 모두 test()