Prüfen Sie, ob alle Werte in einer Karte sind null
Brauche ich, um zu überprüfen, ob alle Werte in einer Karte sind null, ich habe diese Methode, die ich ersetzen wollen durch einen built-in ein, wenn möglich. Einschränkungen: Java 5 und Zugriff auf Apache-Commons-Bibliotheken.
/* Checks if all values are null */
public static boolean isEmpty(Map<Dboid,?> aMap){
boolean isEmpty = true;
Iterator<?> it = aMap.entrySet().iterator();
while(it.hasNext() && isEmpty){
Object value = it.next();
if(value != null) {
isEmpty = false;
}
}
return isEmpty;
}
- was meinst du mit native hier?
- ich denke, OP native bedeutet, seine eigene Methode
- Er meinte: "built-in", z.B. Teil des Map API, oder einen anderen one-liner.
- Dies sollte nicht benannt werden
isEmpty
, da gibt es Tasten, aber die befestigt werden möglicherweise Wertenull
. - und sollten Sie brechen, sobald Sie Sie finden, ein nicht-null-Wert..
- Er tut. Sehen
isEmpty
Bedingung in der Schleife. - Durchlaufen
entrySet()
ist immer wiederMap.Entry
Objekte nie null, selbst wenn der Schlüssel oder der Wert in der map-Eintrag passiert null. - du hast Recht, es ist ein Fehler in meinem code
- das tut er nicht
- Er... er hat. Wenn
value != null
,isEmpty
eingestellt istfalse
, und die Schleife wird nicht fortgesetzt (while (... && isEmpty)
). Keine weiteren tests werden durchgeführt, sobald eine nicht-null
Wert gefunden wird. - hmm du hast Recht, nicht sehen, die isEmpty-Zustand..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als solche gibt es keine direkte Methode für diese, aber Sie können Apache Commons
CollectionUtils.countMatches()
- Methode, und übergeben Sie einNullPredicate
Instanz zu. Natürlich, Sie würde das tun, übergeben Sie die Werte in die map mitMap#values()
Methode:oder noch besser, verwenden Sie
CollectionUtils.exists()
Methode, um zu überprüfen, gibt es mindestens ein element erfüllt, dass dieNotNullPredicate
übergeben, als zweites argument:Andere Lösung ohne Verwendung von Bibliotheken von Drittanbietern.
Ich weiß, die Frage ist für Java 5, aber für diejenigen, die hierher kommen aus der google-Suche, wie ich es Tat:
Für Java - >= 8, die Sie tun können:
mit einer nuance: es wird
true
für leere Karte.Es gibt keine integrierte Methode, dies zu tun. Insbesondere, es gibt nichts, dass ein Mittel "zu finden, ein element, das nicht gleich etwas".
Allerdings, wenn eine Karte, die enthält nur
null
Werte definiert ist, die durch Ihre business-Regeln, die auf "leer", das scheint zu implizieren, dassnull
Werte bedeuten "nicht vorhanden", in welchem Fall Sie wollen, zu konstruieren Sie den code so, dassnull
Werte sind nie aufgenommen in den ersten Platz. Dann können Sie einfach die eingebauteisEmpty()
.wie etwa
Gibt es keine API geben wird, dass Sie, aber könnten Sie die Optimierung, die Methode ein wenig.
Keine Notwendigkeit, überprüfen Sie die isEmpty-variable auf jeder iteration.
Das ist eine kleine Optimierung.