Na przykład mamy
Map<String, Integer> map = new HashMap<>();
map.put("fragments", 5);
map.put("motes", 3);
map.put("shards", 5);
Chcę je wydrukować tak:
fragments: 5
shards: 5
motes: 3
0
Методи Владимиров
16 grudzień 2019, 21:17
1
Czy to odpowiada na twoje pytanie? Sortowanie HashMap według wartości
– user7
16 grudzień 2019, 21:24
Właściwie nie, ale dzięki.
– Методи Владимиров
16 grudzień 2019, 21:40
Nie w jaki sposób?
– user7
16 grudzień 2019, 21:40
Spójrz na ten stackoverflow.com/questions /36754724/…
– user7
16 grudzień 2019, 21:57
2 odpowiedzi
Rozwiązałbym to, umieszczając najpierw wartości w TreeMap
Następnie sortowałbym klucze według równych wartości i umieszczał je w pliku LinkedHashMap
, aby zachować kolejność.
Map<String, Integer> map = new TreeMap<>();
map.put("motes", 3);
map.put("shards", 5);
map.put("fragments", 5);
map = map.entrySet().stream().sorted(Comparator.comparing(
Entry<String, Integer>::getValue).reversed()).collect(
LinkedHashMap<String, Integer>::new,
(map1, e) -> map1.put(e.getKey(), e.getValue()),
LinkedHashMap::putAll);
map.entrySet().forEach(System.out::println);
2
WJS
17 grudzień 2019, 00:01
W oparciu o doskonałą odpowiedź tutaj rozważ następujące rozwiązanie:
public static void main(String[] args) {
final Map<String, Integer> originalMap = new HashMap<>();
originalMap.put("fragments", 5);
originalMap.put("motes", 3);
originalMap.put("shards", 5);
final Map<String, Integer> sortedMap = sortByValue(originalMap, false);
sortedMap
.entrySet()
.stream()
.forEach((entry) -> System.out.println(entry.getKey() + " : " + entry.getValue()));
}
private static Map<String, Integer> sortByValue(Map<String, Integer> unsortedMap, final boolean ascending) {
List<Entry<String, Integer>> list = new LinkedList<>(unsortedMap.entrySet());
// Sorting the list based on values
list.sort((o1, o2) -> ascending ? o1.getValue().compareTo(o2.getValue()) == 0
? o1.getKey().compareTo(o2.getKey())
: o1.getValue().compareTo(o2.getValue()) : o2.getValue().compareTo(o1.getValue()) == 0
? o2.getKey().compareTo(o1.getKey())
: o2.getValue().compareTo(o1.getValue()));
return list.stream().collect(Collectors.toMap(Entry::getKey, Entry::getValue, (a, b) -> b, LinkedHashMap::new));
}
0
Tasos P.
16 grudzień 2019, 23:13
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].