2016-08-23 82 views
1

请原谅我,如果这是一个愚蠢的问题。我不知道是否有对以下Java中比较任何支持: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); 
+0

创建将检查所有的空值的方法,只是使用方法在你的if语句中, –

+0

我会诚实地说,我发现你的原始代码比答案中的任何选项都更具可读性。 –

+0

我很欣赏所有答案,其中大部分答案都是为我学习的,但我仍然试图使这一部分非常容易阅读,以便用户可以轻松阅读。像(&&(a,b,c))|| (&&(d,e,f))|| defaulCase –

回答

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) 
4

你可以做这样的事情,以确保一切不为空,如果使用的是Java版本比8低,否则我会去使用流的别人的答案。

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 
} 
+0

谁降低了这个?这是一个有效的答案 – f1sh

3

在java中8,它可以为未来做Stream.of(a, b, c, d).allMatch(Objects::nonNull),它将返回true如果他们都是非null

-2

我想如果你想让你的代码更具可读性,你应该用方法调用来替换你的比较,比方说每个比较是什么。

例子:

if (isAllRight(a, b, c)) { 
... 
} 

在其他情况下,你可以打破他们成单比较,并逐一检查:

if (a == NUL) { 
    return false; 
} 

if (b == NULL) { 
    return false; 
} 

return true;