1067 Stimmen

Java 8 List<V> in Map<K, V> umwandeln

Ich möchte eine Liste von Objekten in eine Map mit Java 8 Streams und Lambdas übersetzen.

So würde ich es in Java 7 und darunter schreiben.

private Map nameMap(List choices) {
        final Map hashMap = new HashMap<>();
        for (final Choice choice : choices) {
            hashMap.put(choice.getName(), choice);
        }
        return hashMap;
}

Das kann ich einfach mit Java 8 und Guava erreichen, aber ich möchte wissen, wie man dies ohne Guava machen kann.

In Guava:

private Map nameMap(List choices) {
    return Maps.uniqueIndex(choices, new Function() {

        @Override
        public String apply(final Choice input) {
            return input.getName();
        }
    });
}

Und Guava mit Java 8 Lambdas.

private Map nameMap(List choices) {
    return Maps.uniqueIndex(choices, Choice::getName);
}

5voto

Kumar Abhishek Punkte 2724
Map> collect = Arrays.asList(Locale.getAvailableLocales()).stream().collect(Collectors
                .toMap(l -> l.getDisplayCountry(), l -> Collections.singleton(l.getDisplayLanguage())));

3voto

Rajeev Akotkar Punkte 1267
Map map=list.stream().collect(Collectors.toMap(Choice::getName, s->s));

Sogar erfüllt dies für mich seinen Zweck,

Map map=  list1.stream().collect(()-> new HashMap(), 
            (r,s) -> r.put(s.getString(),s),(r,s) -> r.putAll(s));

3voto

user_3380739 Punkte 1495

Hier ist die Lösung von StreamEx

StreamEx.of(choices).toMap(Choice::getName, c -> c);

3voto

Vaneet Kataria Punkte 497

Wenn jeder neue Wert für denselben Schlüsselnamen überschrieben werden muss:

public Map convertListToMap(List choices) {
    return choices.stream()
        .collect(Collectors.toMap(Choice::getName,
            Function.identity(),
            (oldValue, newValue) -> newValue));
}

Wenn alle Auswahlmöglichkeiten für einen Namen in einer Liste gruppiert werden müssen:

public Map convertListToMap(List choices) {
    return choices.stream().collect(Collectors.groupingBy(Choice::getName));
}

1voto

vaibhav Punkte 61
List auswahl; // Ihre Liste
Map ergebnis = auswahl.stream().collect(Collectors.toMap(choice::getKey(), choice));
// angenommen die Klasse "V" hat eine Methode zum Abrufen des Schlüssels, diese Methode muss auch mit Duplikaten umgehen können und einen eindeutigen Schlüssel bereitstellen.

CodeJaeger.com

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.

Powered by:

X