Wie sortiere ich eine Map in Java nach Wert
-
Sortieren einer
Map<key, value>
Mit dersort()
Methode in Java -
Sortieren einer
Map<key, value>
Mit der Methodesorted()
in Java -
Sortieren einer
Map
mit dersort()
Methode mitComparator
in Java -
Sortieren einer
Map<key, value>
unter Verwendung dersortiert()
undtoMap()
Methode in Java -
Sortieren einer
Map
Verwendung von benutzerdefiniertem Code in Java
Dieses Tutorial führt ein, wie man eine Map<key, value>
nach Wert in Java sortiert und listet einige Beispielcodes auf, um es zu verstehen.
Es gibt mehrere Möglichkeiten, eine Map<key, value>
zu sortieren. Hier verwenden wir die sort()
, sorted()
Methode und die Komparator-Schnittstelle, etc. Lassen Sie uns die Beispiele sehen.
Sortieren einer Map<key, value>
Mit der sort()
Methode in Java
Wir können die sort()
-Methode der List
-Schnittstelle verwenden, um die Elemente von Map zu sortieren. Die Methode sort()
sortiert die Elemente in aufsteigender Reihenfolge, und wir haben die Sortierung nach Wert mit der Methode comparingByValue()
angegeben. Siehe das Beispiel unten.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class SimpleTesting {
public static void main(String[] args) {
Map<Integer, Integer> map = new HashMap<>();
map.put(2, 1020);
map.put(3, 300);
map.put(1, 100);
map.put(5, 500);
map.forEach((k, v) -> System.out.println(k + "=" + v));
System.out.println("After Sorting by value");
List<Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());
list.sort(Entry.comparingByValue());
list.forEach(System.out::println);
}
}
Ausgabe:
1=100
2=1020
3=300
5=500
After Sorting
1=100
3=300
5=500
2=1020
Sortieren einer Map<key, value>
Mit der Methode sorted()
in Java
Wenn Sie mit Streams arbeiten, können Sie die Methode sorted()
verwenden, mit der die Elemente in aufsteigender Reihenfolge sortiert werden. Wir übergeben Map.Entry.comparingByValue()
als Argument an die sorted()
Methode, um die Map<key, value>
nach Werten zu sortieren.
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Stream;
public class SimpleTesting {
public static void main(String[] args) {
Map<Integer, Integer> map = new HashMap<>();
map.put(2, 1020);
map.put(3, 300);
map.put(1, 100);
map.put(5, 500);
map.forEach((k, v) -> System.out.println(k + "=" + v));
System.out.println("After Sorting by value");
Stream<Map.Entry<Integer, Integer>> sorted =
map.entrySet().stream().sorted(Map.Entry.comparingByValue());
sorted.forEach(System.out::println);
}
}
Ausgabe:
1=100
2=1020
3=300
5=500
After Sorting by value
1=100
3=300
5=500
2=1020
Sortieren einer Map
mit der sort()
Methode mit Comparator
in Java
In diesem Beispiel verwenden wir die Methode compareTo()
, um Werte von Map<key, value>
innerhalb der Methode sort()
als Argument zu vergleichen. Sie können sehen, dass wir eine anonyme innere Klasse der Comparator
-Schnittstelle erstellt und die compare()
-Methode definiert haben, um die Werte zu vergleichen.
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class SimpleTesting {
public static void main(String[] args) {
Map<Integer, Integer> map = new HashMap<>();
map.put(2, 1020);
map.put(3, 300);
map.put(1, 100);
map.put(5, 500);
map.forEach((k, v) -> System.out.println(k + "=" + v));
System.out.println("After Sorting by value");
List<Entry<Integer, Integer>> list = new LinkedList<>(map.entrySet());
Collections.sort(list, new Comparator<Object>() {
@SuppressWarnings("unchecked")
public int compare(Object o1, Object o2) {
return ((Comparable<Integer>) ((Map.Entry<Integer, Integer>) (o1)).getValue())
.compareTo(((Map.Entry<Integer, Integer>) (o2)).getValue());
}
});
Map<Integer, Integer> result = new LinkedHashMap<>();
for (Iterator<Entry<Integer, Integer>> it = list.iterator(); it.hasNext();) {
Map.Entry<Integer, Integer> entry = (Map.Entry<Integer, Integer>) it.next();
result.put(entry.getKey(), entry.getValue());
}
result.forEach((k, v) -> System.out.println(k + "=" + v));
}
}
Ausgabe:
1=100
2=1020
3=300
5=500
After Sorting by value
1=100
3=300
5=500
2=1020
Sortieren einer Map<key, value>
unter Verwendung der sortiert()
und toMap()
Methode in Java
In diesem Beispiel verwenden wir die Methode sorted()
, um die Map<key, value>
zu sortieren und das Ergebnis mit der Methode toMap()
in LinkedHashMap
zu sammeln. Hier haben wir das Konzept der Methodenreferenz verwendet, um ein LinkedHashMap
-Objekt zu erzeugen.
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;
public class SimpleTesting {
public static void main(String[] args) {
Map<Integer, Integer> map = new HashMap<>();
map.put(2, 1020);
map.put(3, 300);
map.put(1, 100);
map.put(5, 500);
map.forEach((k, v) -> System.out.println(k + "=" + v));
System.out.println("After Sorting by value");
Map<Integer, Integer> result = map.entrySet()
.stream()
.sorted(Entry.comparingByValue())
.collect(Collectors.toMap(Entry::getKey, Entry::getValue,
(e1, e2) -> e1, LinkedHashMap::new));
result.forEach((k, v) -> System.out.println(k + "=" + v));
}
}
Ausgabe:
1=100
2=1020
3=300
5=500
After Sorting by value
1=100
3=300
5=500
2=1020
Sortieren einer Map
Verwendung von benutzerdefiniertem Code in Java
Hier haben wir eine benutzerdefinierte Klasse erstellt, die die Comparator
-Schnittstelle implementiert und ihr Objekt an TreeMap
übergeben, um Map<key, value>
nach Wert zu sortieren.
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
class UserComparator implements Comparator<Object> {
Map<Integer, Integer> map;
public UserComparator(Map<Integer, Integer> map) {
this.map = map;
}
public int compare(Object o1, Object o2) {
if (map.get(o2) == map.get(o1))
return 1;
else
return ((Integer) map.get(o1)).compareTo((Integer) map.get(o2));
}
}
public class SimpleTesting {
public static void main(String[] args) {
Map<Integer, Integer> map = new HashMap<>();
map.put(2, 1020);
map.put(3, 300);
map.put(1, 100);
map.put(5, 500);
map.forEach((k, v) -> System.out.println(k + "=" + v));
System.out.println("After Sorting by value");
UserComparator comparator = new UserComparator(map);
Map<Integer, Integer> result = new TreeMap<Integer, Integer>(comparator);
result.putAll(map);
result.forEach((k, v) -> System.out.println(k + "=" + v));
}
}
Ausgabe:
1=100
2=1020
3=300
5=500
After Sorting by value
1=100
3=300
5=500
2=1020