가자미의 개발이야기

자바 람다 정의되어 있는 함수형 인터페이스 본문

Java/자바 기본 문법

자바 람다 정의되어 있는 함수형 인터페이스

가자미 2021. 2. 4. 17:37

Predicate<T> -boolean test(T t) 전달인자를 근거로 참 거짓반환

Supplier<T> -T get() 메소드 호출 시 무엇인가를 제공

Consumer<T> void accept(T t) 무엇인자를 받아 들이기만 함

Function<T, R> R apply(T t) 입출력 출력이 있음

 

-Predicate<T>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.List;
import java.util.function.Predicate;
import java.util.Arrays;
 
public class Ramda {
    public static int sum(Predicate<Integer> p, List<Integer> lst) {
        int s =0;
        for(int n : lst) {
            if(p.test(n))
                s+=n;
        }
        return s;
    }
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1,5,7,9,11,12);
        int s;
        
        s= sum(n->n%2==0, list);
        System.out.println("짝수합 : "+s);
        
        s=sum(n->n%2!=0, list);
        System.out.println("홀수합 : "+s);
    }
}
 
cs

Predicate<T>의 형제들

-IntPredicate -boolean test(int value)

-LongPredicate -boolean test(long value)

-DoublePredicate -boolean test(double value)

-BiPredicate<T,U> -boolean test(T t, U u) 두가지 요소를 근거로 참거짓 판별해야 할때

 

-Supplier<T>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.List;
import java.util.function.Supplier;
import java.util.ArrayList;
import java.util.Random;
 
public class Ramda {
    public static List<Integer> makeIntList(Supplier<Integer> s, int n) {
        List<Integer> list = new ArrayList<>();
        for(int i=0; i<n;i++) {
            list.add(s.get());
        }
        return list;
    }
    public static void main(String[] args) {
        Supplier<Integer> spr = ()->{
            Random rand = new Random();
            return rand.nextInt(50);
        };
        
        List<Integer> list = makeIntList(spr,5);
        System.out.println(list);
        
        list = makeIntList(spr, 10);
        System.out.println(list);
    }
}

cs

Supplier<T>의 형제들

-Intsupplier -Int getAsInt() 등등...long double boolean...

 

-Consumer<T>

1
2
3
4
5
6
7
8
import java.util.function.Consumer;
 
public class Ramda {
    public static void main(String[] args) {
        Consumer<String> c = s-> System.out.println(s);
        c.accept("pineapple!");
    }
}
cs

Consumer<T>의 형제들

-IntConsumer -void accept(int value) 등등...long, double...

-ObjIntConsumer -void accept(T t, int value) 오브젝트와 기본형 두개 받음 long..double 등

-BiConsumer(T, U) -void accept(T t, U u)

 

-Function<T>

1
2
3
4
5
6
7
8
9
import java.util.function.Function;
 
public class Ramda {
    public static void main(String[] args) {
        Function<String, Integer> f = s-> s.length();
        System.out.println(f.apply("Robot"));
        System.out.println(f.apply("System"));
    }
}
cs

 

 

 

 

'Java > 자바 기본 문법' 카테고리의 다른 글

자바 Optional 클래스  (0) 2021.02.09
자바 메소드 참조  (0) 2021.02.09
자바 람다의 어노테이션과 제네릭  (0) 2021.02.04
자바 다양한 람다식  (0) 2021.02.04
자바 람다의 기초  (0) 2021.02.04