5 回答

TA貢獻1797條經驗 獲得超6個贊
首先將所有鍵收集到列表中并使用 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))) {
}

TA貢獻1911條經驗 獲得超7個贊
您可以編寫一個輔助方法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)) {
? ? ...
}?

TA貢獻1871條經驗 獲得超8個贊
'''簡短且無幫助的答案'''':重新考慮您的模型,使其不需要多個 if 語句。
'''不是那么長,但有洞察力和實用的答案'':創建一個類的層次結構,其中每個類都描述一個實體,該實體將在每個相關的 If-case 上測試屬性。
根據定義,Stuffy 類是滿足匹配 if-1 要求的對象。if-2 的情況是一樣的...他們都會實現 Anything...
然后,每個具體類將實現自己的 doIt() (使用您將放在每個 ifX 子句上的代碼),而不是使用骯臟丑陋的 if 的大而丑陋的 doIt() 方法。

TA貢獻2021條經驗 獲得超8個贊
我覺得你的情況很奇怪。但
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))
{}

TA貢獻1772條經驗 獲得超8個贊
要使用謂詞添加另一種方法:
假設您的條件列表存儲字符串,請創建一個包含您的鍵的集合:
Set<String> myKeys = Set.of("key1","key2","key3","key4","key5");
和兩個接受列表的謂詞
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
}
添加回答
舉報