簡體   English   中英

如何簡化多個“||”?

[英]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;
}

你可以使用StringUtils.isAllBlank()

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 個變量的邏輯表達式,它僅使用補碼運算符和析取運算符。

這正是你的情況!

您擁有所有變量 - ABCDE - 在您的表達式中只使用過一次,並且您只使用了|| 運算符(實際上是析取)。 因此,您的表達式已經處於正常形式,並且無法根據所需的計算進行簡化。

您可以像其他答案建議的那樣使用 collections / 流操作,使其更短(如果變量數量增加,則更具可擴展性),但並不簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM