第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在 if 語句中重構(gòu)多個(gè)條件的最佳方法是什么?

在 if 語句中重構(gòu)多個(gè)條件的最佳方法是什么?

POPMUISE 2023-09-13 18:09:40
我有一個(gè) if 語句,里面有很多條件,但條件相當(dāng)不同。它看起來真的很笨重。我不確定是否有辦法做到這一點(diǎn)。// rqstCriteria is a List// anotherCriteria is a List// key# are the different values that I want to see if it hasif (rqstCriteria.contains(key1) || rqstCriteria.contains(key2) || rqstCriteria.contains(key3) || rqstCriteria.contains(key4) || rqstCriteria.contains(key5) && (anotherCriteria != null &&   (anotherCriteria.contains(key1) ||    anotherCriteria.contains(key2) ||    anotherCriteria.contains(key3) ||    anotherCriteria.contains(key4) ||    anotherCriteria.contains(key5)){...} 
查看完整描述

5 回答

?
FFIVE

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

首先將所有鍵收集到列表中并使用 java-8streams.anyMatch


List<String> list = List.of("key1","key2");  //or Arrays.asList()


if(list.stream().anyMatch(i->rqstCriteria.contains(i)) && list.stream().anyMatch(j->anotherCriteria.contains(j))) {


}

我想說將null支票移到塊外if,最好的方法是返回空List,或者您可以使用以下方法


if(list.stream().anyMatch(i->rqstCriteria.contains(i)) && 

        Objects.nonNull(anotherCriteria) && 

        list.stream().anyMatch(j->anotherCriteria.contains(j))) {


}


查看完整回答
反對(duì) 回復(fù) 2023-09-13
?
Smart貓小萌

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊

您可以編寫一個(gè)輔助方法containsAny:


public <T> boolean containsAny(Collection<T> c, T... keys) {

? ? return c != null && Arrays.stream(keys).anyMatch(c::contains);

}??

然后在 if 語句中使用它:


if (containsAny(rqstCriteria, key1, key2, key3, key4, key5)?

? ? && containsAny(anotherCriteria, key1, key2, key3, key4, key5)) {

? ? ...

}?


查看完整回答
反對(duì) 回復(fù) 2023-09-13
?
ITMISS

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個(gè)贊

'''簡短且無幫助的答案'''':重新考慮您的模型,使其不需要多個(gè) if 語句。

'''不是那么長,但有洞察力和實(shí)用的答案'':創(chuàng)建一個(gè)類的層次結(jié)構(gòu),其中每個(gè)類都描述一個(gè)實(shí)體,該實(shí)體將在每個(gè)相關(guān)的 If-case 上測試屬性。

根據(jù)定義,Stuffy 類是滿足匹配 if-1 要求的對(duì)象。if-2 的情況是一樣的...他們都會(huì)實(shí)現(xiàn) Anything...

然后,每個(gè)具體類將實(shí)現(xiàn)自己的 doIt() (使用您將放在每個(gè) ifX 子句上的代碼),而不是使用骯臟丑陋的 if 的大而丑陋的 doIt() 方法。


查看完整回答
反對(duì) 回復(fù) 2023-09-13
?
寶慕林4294392

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊

我覺得你的情況很奇怪。但


if (Stream.of(key1, key2, key3, key4).anyMatch(rqstCriteria::contains) ||

    rqstCriteria.contains(key5) && 

    anotherCriteria != null && 

    Stream.of(key1, key2, key3, key4, key5).anyMatch(anotherCriteria::contains))

{} 


查看完整回答
反對(duì) 回復(fù) 2023-09-13
?
料青山看我應(yīng)如是

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊

要使用謂詞添加另一種方法:


假設(shè)您的條件列表存儲(chǔ)字符串,請創(chuàng)建一個(gè)包含您的鍵的集合:


Set<String> myKeys = Set.of("key1","key2","key3","key4","key5");

和兩個(gè)接受列表的謂詞


Predicate<List<String>> containsOneOfMyKeys = l -> l.stream().anyMatch(s -> myKeys.contains(s));

Predicate<List<String>> isNotNullOrEmpty = l -> Objects.nonNull(l) && !l.isEmpty();

然后您可以以可讀的方式簡化您的 if 語句,例如:


if(containsOneOfMyKeys.test(rqstCriteria) &&

   isNotNullOrEmpty.and(containsOneOfMyKeys).test(anotherCriteria)){

   //do something

}


查看完整回答
反對(duì) 回復(fù) 2023-09-13
  • 5 回答
  • 0 關(guān)注
  • 187 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)