[英]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.