Unter Java kommt es öfter vor, das ein bestimmter Eintrag in einer Liste gesucht werden soll. Gegeben sei in diesem Beispiel folgende Liste:
// List of elements Listelements = new ArrayList (); elements.add(new Element("Suppe", "Löffel")); elements.add(new Element("Wasser", "Flüssigkeit")); elements.add(new Element("Käse", "Gelb")); elements.add(new Element("Huhn", "Ei"));
Die Klasse, welche die Elemente hält ist wie folgt definiert:
class Element { public final String Key; public final String Value; public Element(String key, String value) { Key = key; Value = value; } }
Soll nun ein bestimmtes Element der Liste ermittelt werden, so kann dies auf dem klassischen Weg wie folgt erledigt werden:
// Get element Element specificElement = null; for (Element element : elements) { if ("Huhn".equals(element.Key)) { specificElement = element; break; } }
Mit der seit Java 8 eingeführtes Stream-API kann das Problem eleganter gelöst werden:
// Get element via stream api Element specificElement = elements.stream() .filter(element -> "Huhn".equals(element.Key)) .findFirst() .orElse(null);
In diesem Fall werden die Elemente durchgegangen und überprüft ob in element.Key die Zeichenkette Huhn enthalten ist. Ist dies der Fall, wird das entsprechende Element zurückgegeben. Wird das Element in diesem Fall nicht gefunden, so ist die Variable specificElement null.
Interessant wären hier definitiv noch die performanceunterschiede. Lohnt es sich vorhandenen code umzudaten, das ganze überhaupt zu lernen oder ist das einfach nur schönerer code.
Habe zu der Fragestellung ein kleines Benchmark geschrieben: siehe https://seeseekey.net/archive/123926/
Pingback: Performance beim Ermitteln von Elementen aus einer Liste › seeseekey.net