이에 대해 생각하는 또 다른 방법이 있습니다.
allMatch()
이다 &&
무엇 sum()
이다+
다음 논리 문장을 고려하십시오.
IntStream.of(1, 2).sum() + 3 == IntStream.of(1, 2, 3).sum()
IntStream.of(1).sum() + 2 == IntStream.of(1, 2).sum()
이것은 sum()
단지 일반화 이기 때문에 의미 가 있습니다 +
. 그러나 요소를 하나 더 제거하면 어떻게됩니까?
IntStream.of().sum() + 1 == IntStream.of(1).sum()
IntStream.of().sum()
특정 방식으로, 또는 빈 숫자 시퀀스의 합 을 정의하는 것이 합리적이라는 것을 알 수 있습니다 . 이것은 우리에게 합산의 "정체성 요소"또는 어떤 것에 추가 될 때 효과가없는 값 ( 0
)을 제공합니다.
같은 논리를 Boolean
대수에 적용 할 수 있습니다 .
Stream.of(true, true).allMatch(it -> it) == Stream.of(true).allMatch(it -> it) && true
보다 일반적으로 :
stream.concat(Stream.of(thing)).allMatch(it -> it) == stream.allMatch(it -> it) && thing
그렇다면 stream = Stream.of()
이 규칙을 적용해야합니다. 이 문제를 해결하기 위해 &&의 "identity element"를 사용할 수 있습니다. true && thing == thing
, 그래서 Stream.of().allMatch(it -> it) == true
.
allMatch
true를 반환하면 그렇게해야한다고 예상 할 수anyMatch
있습니다. 또한 빈 케이스의 경우allMatch(...) == noneMatch(...)
도 이상합니다.