请原谅我这是一个愚蠢的问题。我想知道是否支持在Java中进行以下比较:
(a, b, c .... != null)
适用于:
(a != null && b != null && c != null && d ! null and so on ..)
我试图使代码更具可读性,因为我的代码由于单个语句中的多个条件而几乎不可读。
代码:
variable = (rest.host != null && rest.payload != null
&& rest.lockQueue != null && rest.endpoint != null ) || rest.default.setState
|| rest.scheduler.locked && rest.scheduler.queue.isFull()
&& lastPayload.getActivity.status.executing ? onExecute(rest.payload) : wait(TIME);
答案 0 :(得分:5)
如果您的元素位于集合中,请使用collection.stream().allMatch(x -> x != null)
。实际上,甚至有一个谓词:collection.stream().allMatch(Objects::nonNull)
。
如果您的元素不在集合中,您仍然可以使用Arrays.asList()
从它们创建临时列表。所以,在你的情况下:
Arrays.asList(rest.host, rest.payload, rest.lockQueue, rest.endpoint).stream().allMatch(Objects::nonNull)
编辑:实际上,正如另一个答案中提到的那样,有一种直接创建流的方法,即Stream.of(...)
。所以:
Stream.of(rest.host, rest.payload, rest.lockQueue, rest.endpoint).allMatch(Objects::nonNull)
答案 1 :(得分:4)
如果使用低于8的Java版本,你可以做这样的事情以确保一切都不为空。否则我会使用流来与其他人的答案一起使用。
private boolean checkIfNotNull( Object ... objects ) {
for(int i = 0; i < objects.length; i++) {
if(objects[i] == null)
return false;
}
return true;
}
并且您可以传入要检查的所有对象是否为空。
然后你可以在if语句中调用它,例如
if( checkIfNotNull( a, b, c, d, e, f, g ) ) {
//do stuff
}
答案 2 :(得分:3)
在java 8中,它可以作为下一个Stream.of(a, b, c, d).allMatch(Objects::nonNull)
完成,如果它们都是非true
,它将返回null
。
答案 3 :(得分:-2)
我认为如果你希望你的代码更具可读性,你应该用比较“说”每个比较的方法调用来替换你的比较。
示例:
if (isAllRight(a, b, c)) {
...
}
在其他情况下,您可以将它们分成单个比较并逐个检查:
if (a == NUL) {
return false;
}
if (b == NULL) {
return false;
}
return true;