가자미의 개발이야기
자바 람다 정의되어 있는 함수형 인터페이스 본문
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 |