●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"));
}
}
길이로 출력을 하기 때문에
문자 갯수로 값이 나온다.
'java' 카테고리의 다른 글
필터링 과 맵핑 (0) | 2024.02.15 |
---|---|
스트림의 이해와 생성 (1) | 2024.02.15 |
람다와 함수형 인터페이스 (1) | 2024.02.08 |
람다의 방식 (0) | 2024.02.07 |
이너 클래스(멤버 로컬 익명) (0) | 2024.02.07 |