Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

java.util.function 패키지 본문

Java/JAVA3

java.util.function 패키지

빌드이너프 2023. 8. 10. 10:32

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