함수형 인터페이스
Function<T,R>
java.util.function.Function 인터페이스는 제네릭 형식 T를 인수로 받아서 제네릭 형식 R 객체를 반환하는 추상 메서드 apply를 정의한다.
입력을 출력으로 맵핑하는 람다를 정의할 때 Function 인터페이스를 활용할 수 있다.
//자바8 이전에 익명클래스 사용
Function<String, Integer> toInt = new Function<String, Integer>() {
@Override
public Integer apply(String s) {
return Integer.parseInt(s);
}
};
Integer num = toInt.apply("100");
//ex) String 으로 받은 값을 Integer로 리턴
final Function<String,Integer> toInt = v->Integer.parseInt(v);
Integer nums = toInt.apply("102");
Consumer< T >
java.util.function.Consumer 인터페이스는 제네릭 형식 T 체를 받아서 void를 반환하는 accept 라는 추상메서드를 정의한다. T형식의 객체를 인수로 받아서 어떤 동작을 수행하고 싶을때 사용한다.
출력을 할때 자주 사용되며, 값을 리턴하지 않고 그대로 소비한다.
final Consumer<String> print = v -> System.out.println(v);
print.accept("김문섭");
final Consumer<String> greeting = g-> System.out.println("Hello " + g);
greeting.accept("김달섭");
Predicate< T >
java.tuil.function.Predicate 인터페이스는 제네릭 형식 T 체를 받아서 boolean형 test 라는 추상메서드를 정의한다.
List<Integer> numbers = Arrays.asList(-3,-2,-1,0,1,2,3);
Predicate<Integer> 양수 = p -> p>0;
List<Integer> list = new ArrayList<>();
for(Integer num : numbers){
if(양수.test(num)){
list.add(num);
}
}
만약 여러개의 조건이 필요할때 아래와 같이 코드를 작성할 수 있 다.
private static <T> List<T> filter(List<T> list ,Predicate<T> filter){
List<T> res = new ArrayList<>();
for(T input : list) {
if(filter.test(input)){
res.add(input);
}
}
return res;
}
'개발 서적 정리' 카테고리의 다른 글
[Modern Java in Action] null 대신 Optional을 사용하기 (0) | 2020.08.02 |
---|---|
[Modern Java in Action] Stream 2편 (0) | 2020.07.30 |
[Java8] .map() vs .flatMap() 차이점 알아보기 (0) | 2020.07.24 |
[Modern Java in Action] Stream (0) | 2020.07.13 |
스프링 입문을 위한 자바 객체지향의 원리와 이해 (0) | 2020.07.06 |