Wie können wir eine HashMap<key, ArrayList>
?
Ich möchte auf der Grundlage eines Wertes im Feld ArrayList
.
Wie können wir eine HashMap<key, ArrayList>
?
Ich möchte auf der Grundlage eines Wertes im Feld ArrayList
.
Müssen Sie eine HashMap verwenden? Wenn Sie nur die Map-Schnittstelle benötigen, verwenden Sie eine TreeMap
Wenn Sie durch den Vergleich von Werten in der HashMap sortieren möchten. Sie müssen Code schreiben, um dies zu tun, wenn Sie es einmal tun wollen, können Sie die Werte Ihrer HashMap sortieren:
Map<String, Person> people = new HashMap<>();
Person jim = new Person("Jim", 25);
Person scott = new Person("Scott", 28);
Person anna = new Person("Anna", 23);
people.put(jim.getName(), jim);
people.put(scott.getName(), scott);
people.put(anna.getName(), anna);
// not yet sorted
List<Person> peopleByAge = new ArrayList<>(people.values());
Collections.sort(peopleByAge, Comparator.comparing(Person::getAge));
for (Person p : peopleByAge) {
System.out.println(p.getName() + "\t" + p.getAge());
}
Wenn Sie häufig auf diese sortierte Liste zugreifen wollen, können Sie Ihre Elemente in eine HashMap<TreeSet<Person>>
Die Semantik von Mengen und Listen ist jedoch etwas anders.
Sortierte Liste nach Hasmap-Schlüsseln:
SortedSet<String> keys = new TreeSet<String>(myHashMap.keySet());
Sortierte Liste nach Hashmap-Werten:
SortedSet<String> values = new TreeSet<String>(myHashMap.values());
Im Falle von doppelten Kartenwerten:
List<String> mapValues = new ArrayList<String>(myHashMap.values());
Collections.sort(mapValues);
Viel Glück!
http://snipplr.com/view/2789/sorting-map-keys-by-comparing-its-values/
die Schlüssel bekommen
List keys = new ArrayList(yourMap.keySet());
Sortieren
Collections.sort(keys)
drucken sie.
In jedem Fall können Sie keine sortierten Werte in der HashMap haben (gemäß der API This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time
].
Sie können zwar alle diese Werte auf LinkedHashMap
auch zur späteren Verwendung.
Es scheint, als ob Sie eine Baumstruktur benötigen.
http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html
Sie können ihm einen benutzerdefinierten Komparator übergeben, wenn das zutrifft.
In Java 8:
Comparator<Entry<String, Item>> valueComparator =
(e1, e2) -> e1.getValue().getField().compareTo(e2.getValue().getField());
Map<String, Item> sortedMap =
unsortedMap.entrySet().stream().
sorted(valueComparator).
collect(Collectors.toMap(Entry::getKey, Entry::getValue,
(e1, e2) -> e1, LinkedHashMap::new));
Verwendung von Guave :
Map<String, Item> map = ...;
Function<Item, Integer> getField = new Function<Item, Integer>() {
public Integer apply(Item item) {
return item.getField(); // the field to sort on
}
};
comparatorFunction = Functions.compose(getField, Functions.forMap(map));
comparator = Ordering.natural().onResultOf(comparatorFunction);
Map<String, Item> sortedMap = ImmutableSortedMap.copyOf(map, comparator);
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.