- 자주 사용되는 다양한 함수형 인터페이스를 제공.
- 표준을 제공해준다는 장점이 있다.
<predicate 사용법> predicate<String> isEmptyStr = s -> s.length() ==0; String s = ""; if(isEmptyStr.test(s)) // if(s.length()==0) System.out.println("This is an empty String.");
Q.아래의 빈 칸에 알맞은 함수형 인터페이스(java.util.function패키지)를 적으시오.
1.Supplier<Integer> 2.Consumer<Integer> 3.Predicate<Integer> // 원래는 Function<T,R>처럼 Predicate<Integer, Boolean>이라고 써야 하지만 반환타입이 항상 Boolean이기 때문에 Boolean은 쓰지 않는다. 4.Function<Integer,Long>
- 매개변수가 2개인 함수형 인터페이스
<매개변수가 3개 이상일 때> @Functionalinterface interface TriFunction<T,U,V,R> { R apply(T t, U u, V v); }
- 매개변수의 타입과 반환타입이 일치하는 함수형 인터페이스
- UnaryOperator : 단항 연산자
- BinaryOperator : 이항 연산자
- 보통의 경우에는 T를 넣으면 R이 나온다. 그래서 타입을 2개 써줘야 한다.
- 그런데 UnaryOperator는 T를 넣으면 T가 나오기 때문에 타입을 1개만 써줘도 된다.
- Predicate = 조건식 / 결과값이 boolean으로 나온다.
- and(), or(), negate()로 두 Predicate를 하나로 결합(default메서드)
System.out.println(all.test(2)); // true System.out.println(all2.test(2)); // false
- 등가비교를 위한 Predicate의 작성에는 isEqual()를 사용(static메서드)
Predicate<String> p = Predicate.isEqual(str1) // isEquals()은 static메서드 Boolean result = p.test(str2); // str1과 str2가 같은지 비교한 결과를 반환
↓
boolean result = Predicate.isEqual(str1).test(str2);
- 함수형 인터페이스를 사용하는 컬렉션 프레임웍의 메서드(와일드 카드 생략)
list.forEach(i->System.out,print(i+:,")); // list의 모든 요소를 출력 list.removeIf(x-> x%2==0 || x%3==0); // 2 또는 3의 배수를 제거 list.replaceAll(i->i*10); // 모든 요소에 10을 곱한다. // map의 모든 요소를 {k,v}의 형식으로 출력 map.forEach(k,v) -> System.out.print("{+k+","+v+"},"));