반응형

Predicate의 결합

  • and(), or(), negate()로 두 Predicate를 하나로 결합(default메서드)

Predicate는 조건식이다. 함수가 있을 때, 그 결과가 boolean으로 나오는 것이다.

Predicate 여러개를 하나로 결합할 수 있다.
논리연산자로 결합할 수 있다. negate()는 not인데, true를 false로 false를 true로 바꿔주는 연산자라고 생각하면 쉽다.

그래서 이렇게 3개의 Predicate가 있을 때, 각각 1개씩 조건식이 있어서 3개가 있는데,


이 조건식들을 and, or, negate를 가지고 결합할 수 있다.

인터페이스가 가질 수 있는 메서드는

  • default 메서드
  • static 메서드
  • 추상 메서드

이렇게 3가지를 가질 수 있는데, 인터페이스의 핵심은 추상 메서드이다.
부수적으로 default메서드와 static 메서드가 jdk1.8부터 추가되었다.

predicate를 쓸 때는, predicate가 가지고 있는 추상메서드인 test라는 메서드를 사용해야 한다.
all.test(2); 는 all에 2를 대입하면 true가 나온다. (false와 true가 or연산을 하면 true 반환)

 

  • 등가비교를 위한 Predicate의 작성에는 isEqual()를 사용(static메서드)

등가비교를 하려면,
조건식 만들 때, isEquat을 써서 스트링과 비교하는 Predicate를 만들어서 비교해야 한다.

boolean result = Predicate.isEqual(str1).test(str2)는 str1.equals(str2)랑 똑같은 문장이라고 보면 된다.

[Ex14_3]

 


 

컬렉션 프레임웍과 함수형 인터페이스

  • 함수형 인터페이스를 사용하는 컬렉션 프레임웍의 메서드(와일드 카드 생략)

Collection의 removeIf(Predicate<E> filter) 라는 것이 있는데, 조건에 맞으면 조건에 맞는 요소를 삭제하고, 성공하면 True를 반환해준다.

List의 replaceAll(UnaryOperator<E> operator)는 모든 요소에 대해서 변환하여 대체해준다.

Iterable의 forEach(Consumer<T> action)는 컬렉선의 모든 요소에 작업 action을 수행 한다.

 

그다음은 Map에 관한 것들인데,

compute는 어떤 key를 주고 람다식을 주면, 지정된 키를 찾아서 해당 key의 value에 대해서 작업을 수행한다.

computeIf는 키가 없으면, 작업f 수행 후 추가한다.

computeIfPresent는 지정된 키가 있을 때 작업 f를 수행한다.

merge는 map에 저장되어 있는 모든 요소를 병합하는 것이다.  합칠 때 어떻게 합칠 것 인가를 지정해줄 수 있다.

그리고 Map에 사용하는 forEach는 파라미터가 조금 다르지만(map은 key와 value가 있으므로, 입력으로 key와 value를 받는 BiConsumer로받는다), Iterable의 forEach처럼 모든 요소에 병합작업 f를 수행한다.

replaceAll은 key와 value를 받아서 모든 요소에 치환작업 f를 수행한다.

 

이 메서드들 사용 예는 아래와 같다.

 

[Ex14_4]

 

반응형

'JAVA' 카테고리의 다른 글

스트림, 스트림의 특징  (0) 2022.11.14
메서드 참조, 생성자의 메서드 참조  (0) 2022.08.05
java.util.function 패키지  (0) 2022.08.01
함수형 인터페이스  (0) 2022.07.30
람다식, 람다식 작성하기  (0) 2022.07.28