[英]Error using a ternary operator
如以下代碼所示,我想使用三元運算符。 但是,我收到一個錯誤消息:“;預期”,但我認為,無需添加分號。
代碼 :
.filter(new Predicate<List<String>>() {
@Override
public boolean test(@NonNull List<String> strings) throws Exception {
List<String> lst = new ArrayList<String>();
for (String string : strings) {
Log.i(TAG, ".filter(): string: " + string);
string.toLowerCase().startsWith("b") ? lst.add(string): continue;
}
Log.i(TAG, ".filter(): lsr: " + lst);
return lst.size() > 0;
}
})
三元運算用於分配或返回值, continue;
是一條指令,為了使其簡單易用,請使用以下命令:
if(string.toLowerCase().startsWith("b")) {
lst.add(string);
} else {
continue;
}
條件運算符? :
? :
是表達式 ,而不是語句 (請參見JLS 15.25。條件運算符? :
:) 。
表達式不能寫為語句,即以下兩個都是無效的:
2 + 7;
a == 42 ? foo() : bar();
請注意,只有某些表達式也可用作語句,並且? :
? :
不是其中之一( JLS 14.8。Expression語句 ):
ExpressionStatement: StatementExpression ; StatementExpression: Assignment PreIncrementExpression PreDecrementExpression PostIncrementExpression PostDecrementExpression MethodInvocation ClassInstanceCreationExpression
此外,條件運算符的語法為:
ConditionalOrExpression ? Expression : ConditionalExpression ConditionalOrExpression ? Expression : LambdaExpression
這意味着所有3個部分都必須是expressions ,而continue
是語句,而不是表達式。
總之, ? :
? :
是表達式,不能用作語句,並且只能包含表達式,不能包含語句。 它不能替代if
語句。
因此,您的代碼應使用if
語句編寫:
for (String string : strings) {
Log.i(TAG, ".filter(): string: " + string);
if (string.toLowerCase().startsWith("b")) {
lst.add(string);
} else {
continue;
}
}
當然,在循環末尾使用continue
語句是多余的(循環仍將繼續),因此可以刪除else
語句:
for (String string : strings) {
Log.i(TAG, ".filter(): string: " + string);
if (string.toLowerCase().startsWith("b"))
lst.add(string);
}
首先,三元運算用於分配或返回值,continue是一條指令。
string.toLowerCase().startsWith("b") ? lst.add(string): continue;
替換為
if(string.toLowerCase().startsWith("b"))
lst.add(string);
else
continue;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.