Java中的Java多重比较

时间:2016-08-23 18:38:45

标签: java

请原谅我这是一个愚蠢的问题。我想知道是否支持在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); 

4 个答案:

答案 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;