{"id":2629,"date":"2014-01-07T09:41:47","date_gmt":"2014-01-07T07:41:47","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=2629"},"modified":"2014-01-07T09:41:47","modified_gmt":"2014-01-07T07:41:47","slug":"schnittstelle-map-entry-und-updates-in-java-8-2","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2014\/01\/schnittstelle-map-entry-und-updates-in-java-8-2\/","title":{"rendered":"Schnittstelle Map.Entry und Updates in Java 8"},"content":{"rendered":"<p>W\u00e4hrend keySet() nur die eindeutigen Schl\u00fcssel in einer Menge liefert und die assoziierten Elemente in einem zweiten Schritt geholt werden m\u00fcssten, gibt entrySet() ein Set von Elementen typisiert mit Map.Entry zur\u00fcck. Entry ist eine innere Schnittstelle von Map, die eine API zum Zugriff auf Schl\u00fcssel-Werte-Paare deklariert. Die wichtigen Operationen dieser Schnittstelle sind getKey(), getValue() und setValue(), wobei die letzte Methode optional ist, aber etwa von HashMap angeboten wird. Neben diesen Methoden \u00fcberschreibt Entry auch hashCode() und equals(\u2026). <\/p>\n<p>Beispiel: Laufe die Elemente HashMap als Menge von Map.Entry-Objekten ab: <\/p>\n<p>for ( Map.Entry&lt;String, String&gt; e : h.entrySet() )<br \/>System.out.println( e.getKey() + &#8222;=&#8220; + e.getValue() ); <\/p>\n<p>Map.Entry ist eher ein Interna und die Objekte dienen nicht der langfristen Speicherung. Ein entrySet() ist eine Momentaufnahme und das Ergebnis sollte nicht referenziert werden, denn \u00e4ndert sich der darunterliegende Assoziativspeicher, \u00e4ndern sich auch die Entry-Objekt und das Set&lt;Map.Entry&gt; als ganzes ist vielleicht nicht mehr g\u00fcltig. Entry-Objekt sind nur g\u00fcltig im Moment der Iteration, was den Nutzen eingeschr\u00e4nkt. Daher ist die R\u00fcckgabe von entrySet() mit Set&lt;Map.Entry&lt;K,V&gt;&gt; auch relativ unspezifisch, um was f\u00fcr eine Art von Set es sich genau handelt; ob HashSet oder vielleicht NavigableSet spielt keine Rolle. <\/p>\n<p>Auch wenn die Map.Entry-Objekte nicht f\u00fcr die Speicherung gedacht sind, k\u00f6nnen Sie in Java 8 in einem Strom von Daten verarbeitet und in einer zustandsbehafteten Operation sortiert werden. Der Bonus der Entry-Objekte im Strom ist einfach, dass es von Vorteil ist, Sch\u00fcssel und Wert in einem Objekte gekapselt zu sehen. Aber was ist, wenn jetzt der Strom sortiert werden soll, etwa nach dem Schl\u00fcssel, oder dem Wert? Hier kommen neue Methoden von Java 8 ins Spiel, die den n\u00f6tigen Comparator liefern. <\/p>\n<p>Beispiel: Erfrage eine Menge von Entry-Objekten und sortiere sie nach dem assoziierten Wert: <\/p>\n<p>map.<b>entrySet()<\/b> <\/p>\n<p>.stream() <\/p>\n<p>.sorted( <b>Map.Entry.&lt;String, String&gt;comparingByValue()<\/b> ) <\/p>\n<p>.forEach( System.out::println ); <\/p>\n<p>&nbsp; <\/p>\n<p>static interface <b>Map.Entry<\/b>&lt;K,V&gt; <\/p>\n<p>\u00a7 static &lt;K extends Comparable&lt;? super K&gt;,V&gt; Comparator&lt;Map.Entry&lt;K,V&gt;&gt; comparingByKey() <\/p>\n<p>\u00a7 static &lt;K,V extends Comparable&lt;? super V&gt;&gt; Comparator&lt;Map.Entry&lt;K,V&gt;&gt; comparingByValue() <\/p>\n<p>\u00a7 static &lt;K,V&gt; Comparator&lt;Map.Entry&lt;K,V&gt;&gt; comparingByKey(Comparator&lt;? super K&gt; cmp) <\/p>\n<p>\u00a7 static &lt;K,V&gt; Comparator&lt;Map.Entry&lt;K,V&gt;&gt; comparingByValue(Comparator&lt;? super V&gt; cmp)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>W\u00e4hrend keySet() nur die eindeutigen Schl\u00fcssel in einer Menge liefert und die assoziierten Elemente in einem zweiten Schritt geholt werden m\u00fcssten, gibt entrySet() ein Set von Elementen typisiert mit Map.Entry zur\u00fcck. Entry ist eine innere Schnittstelle von Map, die eine API zum Zugriff auf Schl\u00fcssel-Werte-Paare deklariert. Die wichtigen Operationen dieser Schnittstelle sind getKey(), getValue() und [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[11,66],"tags":[],"class_list":["post-2629","post","type-post","status-publish","format-standard","hentry","category-insel","category-java-8"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2629","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=2629"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2629\/revisions"}],"predecessor-version":[{"id":2630,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2629\/revisions\/2630"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=2629"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=2629"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=2629"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}