728x90
    
    
  public class LamdaEx {
    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; // i의 일의 자리를 없앤다.
        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());
        }
    }
}
----------------------------결과(바뀔 수 있음)--------------------------------------
[22, 39, 82, 94, 49, 74, 100, 5, 47, 19]
[22, 82, 94, 74, 100, ]
[20, 30, 80, 90, 40, 70, 100, 0, 40, 10]- 람다식에서 함수형 인터페이스들을 사용하는 예제이다.
- java.util.function 패키지에 일반적으로 자주 쓰이는 형식의 메서드를 함수형 인터페이스로 미리 정의해 놓음
- 매번 새로운 함수형 인터페이스를 정의하지 말고, 가능하면 이 패키지의 인터페이스를 활용하는 것이 메서드 이름도 통일되고, 재사용성이나 유지보수 측면에도 좋다.
- 위 예제에서 사용된 함수형 인터페이스는 아래와 같다.
 
함수형 인터페이스메서드설명
| java.lang.Runnable | void run() | 매개변수도 없고, 반환값도 없음 | 
| Supplier<T> | T get() | 매개변수는 없고, 반환값만 있음 | 
| Consumer<T> | void accept(T t) | Supplier와 반대로 매개변수만 있고, 반환값이 없음 | 
| Function<T,R> | R apply(T t) | 일반적인 함수. 하나의 매개변수를 받아서 결과를 반환 | 
| Predicate<T> | boolean test(T t) | 조건식을 표현하는데 사용됨. 매개변수는 하나, 반환 타입은 boolean | 
728x90
    
    
  'JAVA' 카테고리의 다른 글
| [디자인 패턴]Builder pattern 이란? (0) | 2022.03.22 | 
|---|---|
| Java 8 LocalDateTime 직렬화 역직렬화 오류 (0) | 2022.03.02 | 
| 스트림의 기본 및 간단한 특징 (0) | 2022.02.14 | 
| 람다 함수(with 메서드 참조) (0) | 2022.02.14 | 
| 람다(Lambda) 함수 사용법(with collection 함수) (0) | 2022.02.14 |