[英]How can I simplify multiple “||”?
我想讓 if 條件簡化,非常感謝您的建議。
if (StringUtils.isNotBlank(Constant.A)
|| StringUtils.isNotBlank(Constant.B)
|| StringUtils.isNotBlank(Constant.C)
|| StringUtils.isNotBlank(Constant.D)
|| StringUtils.isNotBlank(Constant.E)) {
return true;
}
您可以直接返回:
return StringUtils.isNotBlank(Constant.A)
|| StringUtils.isNotBlank(Constant.B)
|| StringUtils.isNotBlank(Constant.C)
|| StringUtils.isNotBlank(Constant.D)
|| StringUtils.isNotBlank(Constant.E);
但除了將驗證放在一個方法中之外,我不相信你可以簡化更多。
如果您想讓您的條件更短(但不是更快),您可以為此使用stream 。
if (Stream.of(Constant.A, Constant.B, Constant.C, Constant.D, Constant.E)
.anyMatch(StringUtils::isNotBlank)) {
return true;
}
if(!StringUtils.isAllBlank(Constant.A,Constant.B,.......)){
return true;
}
如果單個常量不是空白,則返回 true。
TLDR:這個條件不能用 boolean 代數來簡化。
在 boolean 代數中有一個規范正態 forms的概念。 這些 forms 可用於簡化 boolean 表達式,這對於優化 boolean 公式非常重要。 基本上有兩個:minterms 和 maxterms。 它們實際上是對偶的,即它們在功能上是等價的,並且可以在保留真值表的同時將它們轉換為另一個。
讓我們看看maxterms 。 對於 N 個變量的 boolean function,每個變量出現一次的總和項(以補碼(否定)或非補碼形式)稱為最大項。 因此,maxterm 是 N 個變量的邏輯表達式,它僅使用補碼運算符和析取運算符。
這正是你的情況!
您擁有所有變量 - A
, B
, C
, D
和E
- 在您的表達式中只使用過一次,並且您只使用了||
運算符(實際上是析取)。 因此,您的表達式已經處於正常形式,並且無法根據所需的計算進行簡化。
您可以像其他答案建議的那樣使用 collections / 流操作,使其更短(如果變量數量增加,則更具可擴展性),但並不簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.