![](/img/trans.png)
[英]The boolean return statement inside a for loop and if statement is always returning false in java
[英]Multiple boolean values in if else statement is always false in Java
我堅持這種方法,因為 if else 條件說
Condition usersInSales && usersInPayments is always false
Condition usersInSales && usersInLoans is always false
Condition usersInPayments && usersInLoans is always false
我嘗試了不同的條件組合並添加了錯誤值來嘗試解決它,但沒有幫助。 請問我有什么幫助嗎? 提前致謝
private List<UserResource> usersFilteredByDepartment(List<UserResource> users, boolean usersInSales, boolean usersInPayments, boolean usersInLoans) {
if (usersInSales) {
return getUsersInSales(users);
} else if (usersInPayments) {
return getUsersInPayments(users);
} else if (usersInLoans) {
return getUsersInLoans(users);
} else if (usersInSales && usersInPayments) {
return Stream.concat(getUsersInSales(users).stream(), getUsersInPayments(users).stream()).distinct().collect(Collectors.toList());
} else if (usersInSales && usersInLoans) {
return Stream.concat(getUsersInSales(users).stream(), getUsersInLoans(users).stream()).distinct().collect(Collectors.toList());
} else if (usersInPayments && usersInLoans) {
return Stream.concat(getUsersInPayments(users).stream(), getUsersInLoans(users).stream()).distinct().collect(Collectors.toList());
} else return users;
}
if (usersInSales) {
return getUsersInSales(users);
} else if (usersInPayments) { ---> You get here when userInSales = false
return getUsersInPayments(users);
} else if (usersInLoans) { --> You get here when usersInSales = false && usersInPayments = false
return getUsersInLoans(users);
} else if () { --> You get here when usersInSales = false && usersInPayments = false && usersInLoans = false. No use in comparing what you compare here. It will be always false as it reports to
}
希望你現在能找到出路
您可以嘗試首先檢查最具體的約束,然后最后轉向更一般的約束。
if (usersInSales && usersInPayments) {
return Stream.concat(getUsersInSales(users).stream(), getUsersInPayments(users).stream()).distinct().collect(Collectors.toList());
} else if (usersInSales && usersInLoans) {
return Stream.concat(getUsersInSales(users).stream(), getUsersInLoans(users).stream()).distinct().collect(Collectors.toList());
} else if (usersInPayments && usersInLoans) {
return Stream.concat(getUsersInPayments(users).stream(), getUsersInLoans(users).stream()).distinct().collect(Collectors.toList());
} else if (usersInSales) {
return getUsersInSales(users);
} else if (usersInPayments) {
return getUsersInPayments(users);
} else if (usersInLoans) {
return getUsersInLoans(users);
} else return users;
檢查您的工作流程,但是 IMO,如果沒有所有這些 if、else 檢查,您的方法會更有意義。 僅此就足夠了
private List<UserResource> usersFilteredByDepartment(List<UserResource> users, boolean usersInSales, boolean usersInPayments, boolean usersInLoans) {
return Stream.concat(
usersInPayments? getUsersInPayments(users).stream(): Stream.empty(),
usersInLoans? getUsersInLoans(users).stream(): Stream.empty(),
usersInSales? getUsersInSales(users).stream(): Stream.empty()
).distinct().collect(Collectors.toList());
}
你有兩個解決方案。
正如其他人所示,重新排列您的條件。 在您的代碼中,當您點擊&&
語句時,您已經處理了一半為真的情況。 &&
(兩個子句)比單個子句更具限制性。
或者,將雙子句放在前面的 if 中。
if (usersInSales) { return getUsersInSales(users); } else if (usersInPayments) { return getUsersInPayments(users); } else if (usersInLoans) { return getUsersInLoans(users); } else if (usersInSales && usersInPayments) { return Stream.concat(getUsersInSales(users).stream(), getUsersInPayments(users).stream()).distinct().collect(Collectors.toList()); } else if (usersInSales && usersInLoans) {...
變成
if (usersInSales) {
if (usersInPayments) { // Nested if is like && operator.
return Stream.concat(getUsersInSales(users).stream(), getUsersInPayments(users).stream()).distinct().collect(Collectors.toList());
} else {
return getUsersInSales(users);
}
} else if (usersInPayments) { ...
這效率更高一些,我認為通常更可取。
考慮您的邏輯:您首先檢查usersInSales
,如果為真則返回。 然后您檢查usersInPayments
並返回是否為真。 因此,當您檢查usersInSales && usersInPayments
,兩者都將為 false,因為您已經處理了其中一個為 true 的情況。
您需要更改您的邏輯,以便您可以添加而不是專門處理條件。
您的最后 3 個條件將永遠不會運行。 因為您的前三個條件之一已經成立。 要解決此問題,您需要顛倒條件的順序,請嘗試以下操作:
if (usersInSales && usersInPayments) {
} else if (usersInSales && usersInLoans) {
} else if (usersInPayments && usersInLoans) {
} else if (usersInSales ) {
} else if ( usersInLoans) {
} else if (usersInLoans) {
} else return users;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.