Wie sortiere ich eine Map in Java nach Wert

Mohammad Irfan 12 Oktober 2023
  1. Sortieren einer Map<key, value> Mit der sort() Methode in Java
  2. Sortieren einer Map<key, value> Mit der Methode sorted() in Java
  3. Sortieren einer Map mit der sort() Methode mit Comparator in Java
  4. Sortieren einer Map<key, value> unter Verwendung der sortiert() und toMap() Methode in Java
  5. Sortieren einer Map Verwendung von benutzerdefiniertem Code in Java
Wie sortiere ich eine Map in Java nach Wert

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

Verwandter Artikel - Java Map