충분히 쌓여가는
java.util.function 패키지 본문
java.util.function 패키지
자주 사용되는 다양한 함수형 인터페이스를 제공
함수형 인터페이스 | 메서드 | 설명 |
java.lang.Runnable | 매개변수도 없고, 반환값도 없음 | |
Supplier<T> | 매개변수는 없고, 반환값만 있음 | |
Consumer<T> | Supplier와 반대로 매개변수만 있고, 반환값이 없음 | |
Function<T.R> | 일반적인 함수, 하나의 매개변수를 받아서 결과를 반환 | |
Predicate<T> | 조건식을 표현하는데 사용됨 매개변수는 하나, 반환 타입은 boolean |
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> f = i -> i/10*10;
매개변수가 2개인 함수형 인터페이스
함수형 인터페이스 | 메서드 | 설명 |
BiConsumer<T, U> | 두 개의 매개변수만 있고, 반환값이 없음 | |
BiPredicate<T, U> | 조건식을 표현하는데 사용됨 매개변수는 둘, 반환값은 boolean |
|
BiFunction<T, U, R> | 두 개의 매개변수를 받아서 하나의 결과를 반환 |
매개변수의 타입과 반환타입이 일치하는 함수형 인터페이스
함수형 인터페이스 | 메서드 | 설명 |
UnaryOperator<T> | Function의 자손, Function과 달리 매개변수와 결과의 타입이 같다 |
|
BinaryOperator<T> | BiFunction의 자손, BiFunction과 달리 매개변수와 결과의 타입이 같다 |
코드
import java.util.function.*;
import java.util.*;
class FunctionTest {
public static void main(String[] args) {
Supplier<Integer> s = ()-> (int)(Math.random()*100)+1; // 1 ~ 100난수
Consumer<Integer> c = i -> System.out.print(i+", ");
Predicate<Integer> p = i -> i%2==0; // 짝수인지 검사
Function<Integer, Integer> f = i -> i/10*10; // i의 일의 자리를 없앤다
List<Integer> list = new ArrayList<>();
makeRandomList(s, list); // list를 랜덤값으로 채운다
System.out.println(list);
printEvenNum(p, c, list); // 짝수 출력
List<Integer> newList = doSomething(f, list);
System.out.println(newList);
}
// Function<Integer, Integer> f = i -> i/10*10; // i의 일의 자리를 없앤다
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)); // 일의 자리를 없애서 새로은 list에 저장
}
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); // i -> System.out.print(i+", "); 화면에 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());
}
}
}
[99, 70, 70, 14, 62, 72, 28, 94, 42, 75]
[70, 70, 14, 62, 72, 28, 94, 42, ]
[90, 70, 70, 10, 60, 70, 20, 90, 40, 70]
'Java > JAVA3' 카테고리의 다른 글
함수형 인터페이스 (0) | 2023.08.09 |
---|---|
람다식(Lambda Expression) (0) | 2023.08.09 |
wait()와 notify() (0) | 2023.08.08 |
쓰레드의 동기화(synchronization) (0) | 2023.08.07 |
join(), yield() (0) | 2023.08.07 |