자바8 함수형 프로그래밍

HYK·2022년 5월 5일
0

Java

목록 보기
1/4

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());
        //return 
    }

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();
    }
    
profile
Test로 학습 하기

0개의 댓글