2016-08-23 3 views
1

Pardon, wenn dies eine dumme Frage .. Ich frage mich, ob es für folgenden Vergleich in Java jede Unterstützung ist:Java Multiple Vergleich in Java

(a, b, c .... != null) im Ort für:

(a != null && b != null && c != null && d ! null and so on ..) 

ich versuchen, Code besser lesbar als mein Code zu machen, die aufgrund mehrerer Zustand in einzelne Aussage fast unlesbar ist.

Code:

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

ein Verfahren schaffen, das alle, die für NULL-Werte überprüfen würde und verwenden nur diese Methode in Ihrer if-Anweisung statt –

+0

ich werde ehrlich sagen, dass ich Ihren ursprünglicher Code besser lesbar als eine der Alternativen in den Antworten finden. –

+0

Ich schätze alle Antworten, von denen die meisten von ihnen sind für mich zu lernen, aber ich versuche immer noch dieses Stück zu machen, ein sehr einfach, so zu lesen, dass es von den Nutzern leicht verfolgt werden kann. etwas wie (&& (a, b, c)) || (&& (d, e, f)) || defaulCase –

Antwort

5

Wenn Ihre Elemente in einer Sammlung sind, collection.stream().allMatch(x -> x != null) zu verwenden. Eigentlich gibt es sogar ein Prädikat für die: collection.stream().allMatch(Objects::nonNull). Wenn Ihre Elemente nicht in einer Sammlung sind, können Sie weiterhin Arrays.asList() verwenden, um daraus eine Ad-hoc-Liste zu erstellen. Also, in Ihrem Fall:

Arrays.asList(rest.host, rest.payload, rest.lockQueue, rest.endpoint).stream().allMatch(Objects::nonNull) 

EDIT: eigentlich, wie jemand in einer anderen Antwort erwähnt, gibt es eine Methode, die direkt einen Strom erzeugt, nämlich Stream.of(...). Also:

Stream.of(rest.host, rest.payload, rest.lockQueue, rest.endpoint).allMatch(Objects::nonNull) 
4

Sie könnten etwas tun, dass alles zu machen, ist nicht null, wenn eine Java-Version niedriger als 8. Ansonsten verwenden würde ich mit den anderen Menschen der Antworten geht Streams mit.

private boolean checkIfNotNull(Object ... objects) { 
    for(int i = 0; i < objects.length; i++) { 
     if(objects[i] == null) 
      return false; 
    } 
    return true; 
} 

und Sie könnten alle Objekte übergeben, die Sie überprüfen möchten, ob sie null sind.

dann können Sie dies in der if-Anweisung aufrufen wie

if(checkIfNotNull(a, b, c, d, e, f, g)) { 
    //do stuff 
} 
+0

Wer hat das abgelehnt? Es ist eine gültige Antwort – f1sh

3

in Java 8, könnte es als nächstes Stream.of(a, b, c, d).allMatch(Objects::nonNull) getan wird, wird es true zurück, wenn sie alle nicht null sind.

-2

Ich denke, wenn Sie Ihren Code besser lesbar wollen, sollten Sie Ihre Vergleiche ersetzen mit Methode ruft, dass „sagt“, was jeder Vergleich ist.

Beispiel:

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

In anderen Fällen können Sie sie in einzelne Vergleiche brechen kann und überprüfen eins nach dem anderen:

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

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

return true;