2016-06-30 11 views
-2

Ich habe eine Sammlung:Java Stream Sammlung von Karten

Collection<Map<String, Object>> items = new ArrayList(); 
Map<String, Object> item1 = new HashMap(); 
Map<String, Object> item2 = new HashMap(); 

item1.put("first_name", "john"); 
item1.put("last_name", "doe"); 

item2.put("first_name", "jane"); 
item2.put("last_name", "doe"); 

items.add(item1); 
items.add(item2); 

Ich mag würde Strom in der Sammlung alle Karten mit herausgefiltert werden, die „first_name“, als „Jane“ haben. Und es sollte eine Sammlung von Karten (gleicher Typ) zurückgeben.

Wenn es getan werden könnte, indem ich nicht Strom verwende, stört mich nicht, aber ich würde Strom bevorzugen.

+4

OK; Du hast also deine Anforderungen fallen lassen. aber Sie zeigen keine Bemühungen auf Ihrer Seite, das Problem selbst zu lösen. Sie sehen: stackoverflow ist kein "Wir machen das für Sie" -Service – GhostCat

+0

@ Jägermeister Sie haben absolut Recht. Aber ich dachte, dass die Antwort für diese Frage im Allgemeinen so einfach ist, dass sie meine gescheiterten Versuche nicht benötigt. Benutzer Mshnik Antwort unten bewiesen nur meinen Standpunkt. – RVstack

+2

Nun, Sie hatten Glück in diesem Fall. Zu einer anderen Tageszeit war deine Frage vielleicht schon geschlossen, bevor du mit dem Sprechen fertig warst: "Mann, schau, wie viele Downvotes ich in 15 Sekunden bekommen habe". Die Tatsache, dass Sie gültige Antworten erhalten, macht Ihre Frage nicht zu einer guten Frage. Und im Ernst: Ich denke, dass eine Suche auf Google mit den richtigen Begriffen Ihnen in weniger Zeit gute Beispiele gegeben hätte, als Sie die Frage aufschreiben mussten. – GhostCat

Antwort

1

Nicht zu schwer zu tun. Füge das einfach deinem Code hinzu.

Collection<Map<String, Object>> items2 = items.stream().filter(a -> !"jane".equals(a.get("first_name"))).collect(Collectors.toList()); 

Sie müssen angeben, was passiert, wenn die Karte nicht den Schlüssel „first_name“ überhaupt nicht enthalten, ich gehe davon aus, dass es einen first_name Schlüssel haben muss (das ist nicht jane) zu sein gültiger Nachfilter

Zusätzlich nur ein Kopf hoch. Ihr vorhandener Code verwendet Generika nicht korrekt. Meine IDE gab mir zumindest eine Warnung vor unkontrolliertem Casting in den ersten drei Zeilen. Nach Java 1.7 können Sie Argumente des generischen Typs ableiten, aber Sie müssen immer noch die Symbole <> angeben, um dies zu ermöglichen. Hier ist eine feste Version:

Collection<Map<String, Object>> items = new ArrayList<>(); 
Map<String, Object> item1 = new HashMap<>(); 
Map<String, Object> item2 = new HashMap<>(); 
+0

@khelwood behoben, guter Ruf. Ich versuche immer sicherzustellen, dass meine Karten keine Nullschlüssel oder Werte haben (entferne sie einfach, wenn sie null wären), aber es ist ein Eckfall, um trotzdem zu berücksichtigen. – Mshnik