Development Tip

Java 8 Boolean.logicalOr 메서드

yourdevel 2020. 11. 23. 20:17
반응형

Java 8 Boolean.logicalOr 메서드


Java 8에서 Boolean클래스의 새로운 메소드 가 추가되었습니다.

그들 중 하나에 대해 이야기합시다

public static boolean Boolean.logicalOr(boolean a , boolean b)

자, 제 질문은 왜 그들이 필요 했습니까?

다음 두 경우의 차이점은 무엇입니까?

boolean result = a || b; 또는 Boolean result = Boolean.logicalOr(a,b);

무엇이 그렇게 특별한 지 Boolean.logicalOr()그리고 언제 다른 것을 선호해야합니까?


주로 이러한 메서드는 편의를 위해 있고 람다 / 스트림의 메서드 참조를 사용하여 코드를 더 읽기 쉽게 만들기 위해 있습니다. 예를 살펴 보겠습니다.

Stream.of(/* .. some objects .. */)
      .map(/* some function that returns a boolean */)
      .reduce(Boolean::logicalOr);

이것을 쓰려고 a || b:

Stream.of(...)
      .map(...)
      .reduce((a, b) -> a || b); // logicalOr is actually using ||

그렇게 읽을 수 없죠?

Sotirios Delimanolis가 주석에서 언급했듯이 javadoc을 살펴보고 @see BinaryOperator를 팔로우 할 수도 있습니다 . 또는 javadoc 함수 패키지 요약을 살펴보십시오 .


메서드 참조와 관련이 있습니다. 이와 같이 ||람다에서도 (논리 또는) 연산자를 사용할 수 있습니다 .

이런 식으로 다른 새로운 기능도 있습니다 Objects.isNull.

람다 식 대신 함수 참조를 사용하는 것은 (a,b) -> a || b스트림 및 람다 'look-and-feel'과 더 일치합니다.
또한 메서드 참조는 더 적은 바이트 코드를 생성하므로 실행 시간이 더 빨라집니다 (적어도 약간).


다음 두 경우의 차이점은 무엇입니까?
부울 결과 = a || 비; 또는 부울 결과 = Boolean.logicalOr (a, b);

위의 질문에 대해 여기에 제 포인트를 넣고 싶습니다. 다음은 본문입니다.Boolean.logicalOr

  public static boolean logicalOr(boolean paramBoolean1, boolean paramBoolean2)
  {
    return (paramBoolean1) || (paramBoolean2);
  }

그래서 우리는 그것이 a || b궁극적으로 이루어지고 있음을 알 수 있습니다 . 그러나 . Boolean.logicalOr대신 사용하면 단락되지 않습니다 ||. ( Boolean.logicalOr)는 다른 논리 연산자와 함께 제공되는 (a || b)것과 다른 것으로 간주 되기 때문 a || b입니다.
예-: 아래 스 니펫 코드를 참조하십시오 ...

public static void main(String[] args) {

    boolean bCheck1 = false, bCheck2 = true, bCheck3 = false;
    System.out.println("bCheck1\t" + "bCheck2\t" + "bCheck3\t" + "checkOR-Result\t" + "checkLogicalOr-Result");

    bCheck1 = true; bCheck2 = true; bCheck3 = true;
    System.out.println(bCheck1 +"\t"+ bCheck2 +"\t"+ bCheck3 +"\t"+ checkOR(bCheck1, bCheck2, bCheck3) + "\t\t" + checkLogicalOr(bCheck1, bCheck2, bCheck3));
    bCheck1 = true; bCheck2 = true; bCheck3 = false;
    System.out.println(bCheck1 +"\t"+ bCheck2 +"\t"+ bCheck3 +"\t"+ checkOR(bCheck1, bCheck2, bCheck3) + "\t\t" + checkLogicalOr(bCheck1, bCheck2, bCheck3));
    bCheck1 = true; bCheck2 = false; bCheck3 = true;
    System.out.println(bCheck1 +"\t"+ bCheck2 +"\t"+ bCheck3 +"\t"+ checkOR(bCheck1, bCheck2, bCheck3) + "\t\t" + checkLogicalOr(bCheck1, bCheck2, bCheck3));
    bCheck1 = true; bCheck2 = false; bCheck3 = false;
    System.out.println(bCheck1 +"\t"+ bCheck2 +"\t"+ bCheck3 +"\t"+ checkOR(bCheck1, bCheck2, bCheck3) + "\t\t" + checkLogicalOr(bCheck1, bCheck2, bCheck3));
    bCheck1 = false; bCheck2 = true; bCheck3 = true;
    System.out.println(bCheck1 +"\t"+ bCheck2 +"\t"+ bCheck3 +"\t"+ checkOR(bCheck1, bCheck2, bCheck3) + "\t\t" + checkLogicalOr(bCheck1, bCheck2, bCheck3));
    bCheck1 = false; bCheck2 = true; bCheck3 = false;
    System.out.println(bCheck1 +"\t"+ bCheck2 +"\t"+ bCheck3 +"\t"+ checkOR(bCheck1, bCheck2, bCheck3) + "\t\t" + checkLogicalOr(bCheck1, bCheck2, bCheck3));
    bCheck1 = false; bCheck2 = false; bCheck3 = true;
    System.out.println(bCheck1 +"\t"+ bCheck2 +"\t"+ bCheck3 +"\t"+ checkOR(bCheck1, bCheck2, bCheck3) + "\t\t" + checkLogicalOr(bCheck1, bCheck2, bCheck3));
    bCheck1 = false; bCheck2 = false; bCheck3 = true;
    System.out.println(bCheck1 +"\t"+ bCheck2 +"\t"+ bCheck3 +"\t"+ checkOR(bCheck1, bCheck2, bCheck3) + "\t\t" + checkLogicalOr(bCheck1, bCheck2, bCheck3));
}

private static boolean checkOR(boolean bCheck1, boolean bCheck2, boolean bCheck3){
    return bCheck1 && bCheck2 || bCheck3;
}

private static boolean checkLogicalOr(boolean bCheck1, boolean bCheck2, boolean bCheck3){
    return bCheck1 && Boolean.logicalOr(bCheck2, bCheck3);
}

결과는 다음과 같습니다.

bCheck1 bCheck2 bCheck3 checkOR-Result  checkLogicalOr-Result
true    true    true    true            true
true    true    false   true            true
true    false   true    true            true
true    false   false   false           false
false   true    true    true            false
false   true    false   false           false
false   false   true    true            false
false   false   true    true            false

다른 논리 연산자와 함께 사용될 때마다 다른 결과가 생성되는 것을 볼 수 있습니다. 따라서 ||오버 Boolean.logicalOr또는 그 반대로 사용 대해 신중해야합니다 . 물론 Boolean.logicalOr보다 더 많은 읽을 수 있습니다 ||. 그러나 각각은 그 의미가 있으며 아래와 같이 사용할 수 있습니다.
if(bCheck1 && bCheck2 || bCheck3)로 교체 할 수 없습니다. if(bCheck1 && Boolean.logicalOr(bCheck2, bCheck3))
그러나로 교체 if(bCheck1 && (bCheck2 || bCheck3))하는 if(bCheck1 && Boolean.logicalOr(bCheck2, bCheck3))것은 확실히 좋은 생각입니다.

참고URL : https://stackoverflow.com/questions/41736767/java-8-boolean-logicalor-method

반응형