kotlin/java

Lambda 예(2)

slow333 2023. 1. 6. 18:38

Supplier, Consumer, Predicate, Function을 이용한 예

 

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

public class LambdaEx2 {
  public static void main(String[] args) {

    Supplier<Integer> s =() -> (int)(Math.random()*100)+1;
    Consumer<Integer> c = i -> System.out.println(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<>(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) {
    for (T i : list) {
      if (p.test(i)) c.accept(i);
    }
  }

  static <T> void makeRandomList(Supplier<T> s, List<T> list) {
    for (int i = 0; i < 10; i++) {
      list.add(s.get());
    }
  }
}