source

항상 true를 반환하는 기본 제공 Java 8 술어?

goodcode 2022. 8. 13. 12:11
반응형

항상 true를 반환하는 기본 제공 Java 8 술어?

Google Guava에는 항상 반환되는 술어가 있습니다.Java 8도 비슷한 기능을 가지고 있나요?Predicate내가 할 수고가 필요해(foo)->{return true;}하지만 난 미리 만들어 놓은 걸 원해Collections.emptySet().

Java 8에는 내장된 always-true 및 always-false 술어가 없습니다.이 글을 쓰는 가장 간결한 방법은

x -> true

그리고.

x -> false

비교 대상

Predicates.alwaysTrue() // Guava

마지막으로 익명의 내적 계층에 대해서:

new Predicate<Object>() {
    public boolean test(Object x) {
        return true;
    }
}

아마도 Guava에 이러한 기본 술어가 있는 이유는 익명 내부 클래스에 비해 정적 메서드 호출의 구문적 이점이 매우 크기 때문일 것입니다.Java 8에서는 lambda 구문이 매우 간결하기 때문에 정적 메서드 호출을 쓰는 데 구문적인 단점이 있습니다.

하지만 그건 통사적 비교일 뿐이죠글로벌한 always-true 술어가 1개일 경우 다음과 같이 작은 공간상의 이점이 있을 수 있습니다.x -> true각 클래스는 고유한 술어 인스턴스를 생성합니다.이게 네가 걱정하는 거야?비용 절감 효과는 그다지 크지 않아 보였기 때문에 애초에 추가되지 않았을 것입니다.하지만 향후 발매를 위해 재고될 수 있다.

업데이트 2015-04-24

다음과 같은 다양한 정적 기능의 추가를 검토했습니다.Predicate.alwaysTrue,Runnable.noop등, 향후의 Java SE 버전에서는 추가하지 않기로 결정했습니다.

분명히 이름이 있는 것과 기입된 람다에 대한 값이 있지만, 이 값은 매우 작습니다.우리는 사람들이 읽고 쓰는 법을 배우기를 기대한다.x -> true그리고.() -> { }그리고 그들의 용법이 관용적이 될 것이다.가치까지Function.identity()에 걸쳐서x -> x의문의 여지가 있다.

기입된 람다를 평가하는 대신 기존 함수를 재사용하는 것은 매우 작은 성능상의 이점이 있지만, 우리는 이러한 종류의 함수의 사용이 매우 적기 때문에 이러한 이점은 무시할 수 있을 것으로 예상하며, API 블롯의 가치는 확실히 없습니다.

Holger는 또한 코멘트에서 다음과 같은 구성 함수의 최적화 가능성을 언급했습니다.Predicate.or뭐 그런 거.이 문제도 고려되었지만(JDK-8067971) 다소 취약하고 오류가 발생하기 쉬우며, 구현 가치가 없을 정도로 드물게 발생하는 것으로 간주되었습니다.

이 Lambda FAQ 항목도 참조하십시오.

guava 미포함

Boolean.TRUE::booleanValue

언급URL : https://stackoverflow.com/questions/26549659/built-in-java-8-predicate-that-always-returns-true

반응형