1. java.util.function패키지
- 자주 사용되는 다양한 함수형 인터페이스를 제공
함수형 인터페이스 |
메서드 |
설명 |
java.lang.Runnable |
void run() |
매개변수도 없고, 반환값도 없음 |
Supplier<T> |
T get() -> T |
매개변수는 없고, 반환값만 있음 |
Consumer<T> |
T -> void accept(T t) |
Supplier와 반대로 매개변수만 있고, 반환값이 없음 |
Function<T, R> |
T -> R apply(T t) -> R |
일반적인 함수. 하나의 매개변수를 받아서 결과를 반환 |
Predicate<T> |
T -> boolean test(T t) -> boolean |
조건식을 표현하는데 사용됨 매개변수는 하나, 반환 타입은 boolean |
Predicate<String> isEmptyStr = s -> s.length()==0;
String s = "";
if(isEmptyStr.test(s)) // if(s.length()==0)
System.out.println("This is an empty String.");
Supplier<Integer> f = () -> (int)(Math.random()*100)+1;
Consumer<Integer> f = i -> System.out.print(i+", ");
Predicate<Integer> f = i -> i % 2 == 0;
Function<Integer, Integer> f = i -> i / 10 * 10;
함수형 인터페이스 |
메서드 |
설명 |
BiConsumer<T,U> |
T, U -> void accept(T t, U u) |
두개의 매개변수만 있고, 반환값이 없음 |
BiPredicate<T, U> |
T, U -> boolean test(T t, U u) -> boolean |
조건식을 표현하는데 사용됨 매개변수는 둘, 반환값은 boolean |
BiFunction<T, U, R> |
T, U -> R apply(T t, U u) -> R |
두 개의 매개변수를 받아서 하나의 결과를 반환 |
- 매개변수의 타입과 반환타입이 일치하는 함수형 인터페이스
함수형 인터페이스 |
메서드 |
설명 |
UnaryOperator<T>(단항연산자) |
T -> T apply(T t) -> T |
Function의 자손, Function과 달리 매개변수와 결과의 타입이 같다. |
BinaryOperator<T>(이항연산자) |
T, T -> T apply(T t, T t) -> T |
BiFunction의 자손, BiFunction과 달리 매개변수와 결과의 타입이 같다. |
public class Ex02_03 {
public static void main(String[] args) {
Supplier<Integer> s = () -> (int)(Math.random()*100)+1;
Consumer<Integer> c = i -> System.out.print(i+", ");
Predicate<Integer> p = i -> i%2==0;
Function<Integer, Integer> f = i -> i/10*10;
List<Integer> list = new ArrayList<>();
makeRandomList(s, list);
System.out.println(list);
printEvenNum(p, c, list);
List<Integer> newList = doSomething(f, list);
System.out.println(newList);
}
static <T> List<T> doSomething(Function<T,T> f, List<T> list) {
List<T> newList = new ArrayList<T>(list.size());
for (T i : list) {
newList.add(f.apply(i));
}
return newList;
}
static <T> void printEvenNum(Predicate<T> p, Consumer<T> c, List<T> list) {
System.out.print("[");
for (T i : list) {
if (p.test(i)) {
c.accept(i);
}
}
System.out.println("]");
}
static <T> void makeRandomList(Supplier<T> s, List<T> list) {
for (int i = 0; i < 10; i++) {
list.add(s.get());
}
}
}