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
'Development Tip' 카테고리의 다른 글
getLocationOnScreen () 대 getLocationInWindow () (0) | 2020.11.23 |
---|---|
Go를 사용하여 JSON 응답을 제공하는 방법은 무엇입니까? (0) | 2020.11.23 |
Psql이 서버에 연결할 수 없습니다 : 해당 파일 또는 디렉터리가 없습니다. 5432 오류? (0) | 2020.11.23 |
WPF에서 너비를 100 %로 설정하는 방법 (0) | 2020.11.23 |
NSSet을 정렬하는 가장 효율적인 방법은 무엇입니까? (0) | 2020.11.23 |