본문 바로가기
Java/람다와 스트림

java.util.function 패키지

by 재성스 2023. 9. 13.
반응형

Java에서 함수형 프로그래밍을 지원하기 위해 인터페이스와 함수형 인터페이스를 포함하는 패키지이다. 이 패키지는 람다 표현식과 스트림API와 함께 사용되며, 함수형 프로그래밍 스타일로 코드를 작성할 수 있게 도와 준다. 

 

매번 새로운 함수형 인터페이스를 정의하는 것보다 가능하면, function 패키지의 인터페이스를 활용하는 것이 일관성 측면이나, 재사용성에서 효율이 좋다.


function 패키지의 주요 함수형 인터페이스 

함수형 인터페이스 메서드 설명
java.lang.Runnable void run() - 매개변수 x
- 반환 값 x
Supplier<T> T get() - 매개변수 x
- 반환 값 o
Consumer<T> void accept(T t) - 매개변수 o
- 반환 값 x
- Supplier와 반대
Function<T, R> R apply(T t) - 매개변수 1개
- 반환 값 o
Predicate<T> boolean test(T t) -조건식 표현에 사용됨
- 매개변수 1개
- 반환 값 boolean
- Function의 변형, 반환 값만 다
*참고* 수학에서 결과로 true, false를 반환하는 함수를 프레디케이트(predicate)라고 한다.

 

function 패키지의 인터페이스 간단한 예제

// Runnable 매개변수x 반환값x
Runnable runnable = () -> System.out.println("run() 실행.");
runnable.run();     // run() 실행.

// Supplier 매개변수x 반환값o
Supplier<Integer> supplier = () -> 1+2+3+4;
supplier.get();     // 10

// Consumer 매개변수o 반환값x
Consumer<String> consumer = (x) -> System.out.println(x);
consumer.accept("난 매개변수");  // 난 매개변수

// Function 매개변수 1개 반환값o
Function<Integer, Integer> function = (x)-> x+2;
function.apply(1);  // 3

// Predicate 매개변수 1개 반환값 boolean
Predicate<Integer> predicate = (x)-> x==2;
predicate.test(2);  // true

 


매개변수가 2개인 함수형 인터페이스

- 인터페이스 이름 앞에 접두사 'Bi'가 붙는다.

함수형 인터페이스 메서드 설명
BiConsumer<T, U> void accept(T t, U u) - 매개변수 2개
- 반환값 x
BiPredicate<T, U> boolean test(T t, U u) - 조건식 표현에 사용
- 매개변수 2개
- 반환값은 boolean
BiFunction<T, U, R> R apply (T t, U u) - 매개변수 2개
- 반환값o
BiConsumer<Integer, Integer> bc = (x, y) -> System.out.println("첫 번째 : " + x + "두 번째 : " + y);
bc.accept(1, 2); // 첫 번째 : 1 두 번째 : 2

BiPredicate<Integer, Integer> bp = (x, y) -> x == y;
bp.test(1, 2);   // false

BiFunction<Integer, Integer, int[]> bf = (x, y) -> new int[]{x, y};
bf.apply(1, 2); // [1,2]
*참고*  BiSupplier가 없는 이유는 Sipplier는 매개변수가 없고 반환 값이 2개가 될 수 없기 때문이다.

매개변수를 3개 이상 필요한 경우에는 함수형 인터페이스를 직접 만들어서 써야한다. 

@FunctionalInterface
interface TriFunction(T,U,V,R){
	R apply(T t, U u, V v);
}

 


컬렉션 프레임웍의 함수형 인터페이스 

컬렉션 프레임웍의 함수형 인터페이스

간단한 사용 예제

ArrayList<Integer> list = new ArrayList<>();
for(int i=0; i<10; i++) list.add(i);

// list 요소 출력
list.forEach(i-> System.out.println(i));

// list에서 2 또는 3의 배수를 제거
list.removeIf(x-> x%2==0 || x%3==0);

//list의 모든 요소에 10을 곱한다.
list.replaceAll(i->i*10);
반응형

'Java > 람다와 스트림' 카테고리의 다른 글

스트림(stream) - 기본  (0) 2023.09.25
(람다식) 함수형 인터페이스와 메소드 레퍼런스  (0) 2023.09.05
람다식이란?  (0) 2023.09.04