java
미리 정의되어 있는 함수형 인터페이스
improve
2024. 2. 13. 13:28
●Predicate<T>
package org.example;
import java.util.Arrays;
import java.util.List;
import java.util.function.IntPredicate;
import java.util.function.Predicate;
public class Main {
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);
}
public static int sum(IntPredicate p, List<Integer> lst){
int s =0;
for (int n : lst){
if (p.test(n))
s +=n;
}
return s;
}
}
이 함수는 boolean Test 와 같이 전달인자를 근거로 참 과 거짓을 반환
●Supplier<T>
package org.example;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.function.Supplier;
public class Main2 {
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);
}
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;
}
}
이 구문에서 s.get 을 사용하기 위해 Supplier 를 사용했다.
●Consumer<T>
무엇인자를 받아 들이기만할수 있다.
package org.example;
import java.util.function.Consumer;
public class Main3 {
public static void main(String[] args) {
Consumer<String> c = s -> System.out.println(s);
c.accept("prneapple");
c.accept("strawberry");
}
}
출력창에 굳이 적지 않아도 된다.
●Funtion<T>
입출력 출력이 있음(수학적으로 함수)
package org.example;
import java.util.function.Function;
public class Main4 {
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"));
}
}
길이로 출력을 하기 때문에
문자 갯수로 값이 나온다.