Functional Interface
자바에서 제공해주는 Functional Interface연습해보기
자주쓰는 Functional Interface 종류
1. function < T , R >
- Funtion 인터페이스는 다음과 같이 1개의 매개변수와 Return 값을 가진다.
- 추상 메서드는 apply로 R apply (T t); 형태이다.
사용예시
- Integer 형을 String 형으로 반환해주는 funtion
public static void main(String []args){
List<Integer> List = Arrays.asList(1,2,3,4,5,6,7,8,9);
Function<Integer, String> function = i-> String.valueOf(i);
for(Integer i : List){
if(i>5){
System.out.println("데이터 : "+ function.apply(i));
}
}
}
2. Consumer < T >
- Return 값은 없고 파라미터만 가진다.
- 추상 메서드는 accept로 void accept(T t); 형태이다.
사용예시
- 파라미터로 받은 값을 출력해주는 Consumer
public static void main(String []args){
Consumer<String> consumer = string -> System.out.println("데이터 : " + string);
consumer.accept("test");
}
3. Supplier < T >
- 파라미터는 없고 Return 값만 가진다.
- 추상 메서드는 get으로 T get(); 형태이다.
사용예시
- return 이라는 문자열을 리턴해주는 Supplier
public static void main(String []args){
Supplier<String> supplier = () -> "return";
System.out.println(supplier.get());
}
4. Predicate < T >
- 파라미터가 있고 Return 값은 Boolean 형태로 받는다.
- 추상 메서드는 test으로 boolean test(T t); 형태이다.
사용예시
- 다음과 같이 Predicate를 사용해서 중복 코드를 제거할 수 있다
public static void main(String []args){
List<Integer> List = Arrays.asList(1,2,3,4,5,6,7,8,9);
Predicate<Integer> predicate = i -> i>3;
Predicate<Integer> predicate2 = i -> i<5;
System.out.println("filter(List, predicate) = " + filter(List, predicate));
System.out.println("filter(List, predicate2) = " + filter(List, predicate2));
}
private static <T> String filter(List<T> List, Predicate<T> predicate) {
StringBuilder stringBuilder =new StringBuilder();
stringBuilder.append("데이터 : ");
for(T i : List){
if(predicate.test(i)){
stringBuilder.append(i+ " ");
}
}
return stringBuilder.toString();
}