자바

자바에서 제공하는 함수형 인터페이스

devjones 2021. 4. 5. 15:06

docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html

 

java.util.function (Java Platform SE 8 )

Interface Summary  Interface Description BiConsumer Represents an operation that accepts two input arguments and returns no result. BiFunction Represents a function that accepts two arguments and produces a result. BinaryOperator Represents an operation u

docs.oracle.com

 

자바에서 기본적으로 제공해주는 함수형 인터페이스 몇몇 있다. (위 링크 참고)

하나씩 살펴보자.

 

1. Function<R, T>

 

다음은 T타입을 받아서 R타입을 리턴하는 함수 인터페이스이다.

package main03;

import java.util.function.Function;

public class Plus10 implements Function<Integer, Integer> {

	@Override
	public Integer apply(Integer t) {
		
		return t + 10;
	}
	
}

 

package main03;

public class Main {
	
	
	public static void main(String[] args) {
		
		Plus10 p10 = new Plus10();
		System.out.println(p10.apply(1));// 11
	}
}

 

Plus10 클래스 없이 람다표현식을 이용할 수 있다.

package main03;

import java.util.function.Function;

public class Main {
	
	
	public static void main(String[] args) {
		
		Function<Integer, Integer> p10 = (number) -> number + 10;
//										 (number) -> {
//											 return number + 10;
//										 }
		System.out.println(p10.apply(1));
	}
}

 

함수 조합용 메소드

 

* compose

package main03;

import java.util.function.Function;

public class Main {
	
	
	public static void main(String[] args) {
		
		Function<Integer, Integer> p10 = (number) -> number + 10;
		Function<Integer, Integer> multiply2 = (number) -> number * 2;

//		p10.compose(multiply2);		// .compose 메소드는 파라미터를 먼저 적용하고 그 결과를 p10의 파라미터로 사용한다.
		
		Function<Integer, Integer> multiply2AndPlus10 = p10.compose(multiply2);
		
		System.out.println(multiply2AndPlus10.apply(1));	// 12
	}
}

 

* andThen

package main03;

import java.util.function.Function;

public class Main {
	
	
	public static void main(String[] args) {
		
		Function<Integer, Integer> p10 = (number) -> number + 10;
		Function<Integer, Integer> multiply2 = (number) -> number * 2;

//		p10.andThen(multiply2);		// .andThen 메소드는 먼저 p10, 그다음에 multiply2
		System.out.println(p10.andThen(multiply2).apply(1));	// 22
	}
}

 

2. BiFunction<T, U, R>

두 개의 값(T, U)을 받아서 R 타입을 리턴하는 함수 인터페이스

3. Consumer<T>

T 타입을 받아서 아무값도 리턴하지 않는 함수 인터페이스

package main03;

import java.util.function.Consumer;

public class Main {
	
	
	public static void main(String[] args) {
		
		Consumer<Integer> printT = (i) -> System.out.println(i);
		
		printT.accept(10);	// 10
	}
}

 

4. Supplier<T>

T 타입의 값을 제공하는 함수 인터페이스

package main03;

import java.util.function.Consumer;
import java.util.function.Supplier;

public class Main {
	
	public static void main(String[] args) {
		
		Supplier<Integer> get10 = () -> 10;
		
		System.out.println(get10.get());	// 10
	}
}

 

 

5. Predicate<T>

T 타입을 받아서 boolean 을 리턴하는 함수 인터페이스

package main03;

import java.util.function.Predicate;

public class Main {
	
	public static void main(String[] args) {
		
		Predicate<String> startsWithDevjones = (s) -> s.startsWith("devjones");
		Predicate<Integer> isEven = (i) -> i % 2 == 0;
		
		System.out.println(startsWithDevjones.test("devjones 파이팅!"));	// true
		System.out.println(isEven.test(9));		// false
	}
}