[JAVA] Lambda 람다 3 - 함수형 인터페이스 Predicate<T>

펭귄안녕·2024년 10월 22일

JAVA

목록 보기
6/9
post-thumbnail

람다와 제네릭

LambdaPractice6< T> 인터페이스

람다식을 쓰기 위한 인터페이스

@FunctionalInterface

제네릭 활용

@FunctionalInterface
interface LambdaPractice6<T> {
    T getResult(T a, T b);
//    void aaa();
}

LambdaPracticeTest

LambdaPractice6<Integer> p6=(a,b)->a+b;
p6.getResult(10,5);

LambdaPractice6<String> p61=(a,b)->a+b;
p61.getResult("a","b"); // = "ab"

LambdaPractice7<T,R> 인터페이스

@FunctionalInterface
interface LambdaPractice7<T,R> {
    R getResult(T a, T b);
}

LambdaPracticeTest

// String 변수 자료형, Integer는 리턴타입
LambdaPractice7<String,Integer> p7=(a,b)->a.length()+b.length();
p7.getResult("뿡","123"); // 4 리턴

정의되어있는 함수형 인터페이스

DefinedFunctionalInterface

Predicate<T> -> boolean test(T t)
Supplier<T> -> T get()
Consumer<T> -> void accept(T t)
Function<T,R> -> R apply(T t)

DefinedFunctional

Predicate< T> 미사용 메서드

  1. 매개변수로 정수형 리스트가 들어오면 리스트의 요소 중 짝수만 출력
public static void printEvenOfList(List<Integer> list){
	for (int e :list){
		if (e%2==0){
		System.out.print(e+" ");
		}
	}
}
  1. 매개변수로 정수형 리스트가 들어오면 리스트의 요소 중 홀수만 출력
public static void printOddOfList(List<Integer> list){
	for (int e :list){
		if (e%2==1){
		System.out.print(e+" ");
		}
	}
}
  1. 매개변수로 정수형 리스트가 들어오면 리스트의 요소 중 짝수만 합 출력
public static void printEvenSumOfList(List<Integer> list){
	int result=0;
	for (int e :list){
		if (e%2==0){
		result+=e;
		}
	}
	System.out.print(result+" ");
}

DefinedFunctionalTest

public class DefinedFunctionalTest {
    public static void main(String[] args) {
        List<Integer> list=new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        DefinedFunctional.printEvenOfList(list);
        DefinedFunctional.printOddOfList(list);
        DefinedFunctional.printEvenSumOfList(list);

DefinedFunctional

Predicate< T> -> boolean test(T t) 연습용 메서드

public static void printOfList(List<Integer> list, Predicate<Integer> P){
	for (int e:list){
		if (P.test(e)){
		System.out.println(e);
		}
	}
}

DefinedFunctionalTest

Predicate<Integer> p= (a)->a%2==0;
DefinedFunctional.printOfList(list,p);

DefinedFunctional.printOfList(list,(num)->num%2==0); 

+)

DefinedFunctional.printOfList(list,(num)->num%2!=0); 

DefinedFunctional.printOfList(list,(num)->num>3);

🙄

  • list에서 짝수만 삭제
for (int i=0;i<list.size();i++){
	if (list.get(i)%2==0){
		list.remove(i);
		i--;
	}
}

//짝수만 삭제됐는지 확인
for (int e:list){
	System.out.print(e+" ");
}
  • 함수형 인터페이스 사용으로 변환
Predicate<Integer> p1=(num)->num>2;
list.removeIf(p1);

위와같음

list.removeIf(num->num>2);
  • 출력을 람다로 대체
list.forEach(num-> System.out.println(num));

위와 같음

// 메서드 참조
list.forEach(System.out::println);

0개의 댓글