Java Mapstruct Hashmap mit gemappten DTO'S befüllen

mmtzh

Cadet 3rd Year
Registriert
Nov. 2014
Beiträge
62
Hi,

ist es möglich mit MapStruct eine HashMap mit ebenfalls gemappten DTO-Objecten zu befüllen?

damit es klarer wird, versuch ich das noch beispielhaft aufzuzeigen:

ich habe eine foo-Klasse:
Code:
public class Foo {
     int id;
     String name;
     String bla;
     String blub;
}

und eine etwas schmalere FooDTO Klasse:
Code:
public class FooDTO {
     int id;
     String name;
     String bla;
}
und eine FooMapDTO Klasse:
Code:
public class FooMapDTO {
       HashMap<Integer, FooDTO> fooMap;
}

Die Map in der FooMapDTO Klasse soll als key die ID der FOO Klasse und als Value das DTO selbst beinhalten.
Kann ich mit MapStruct irgendwie einen Mapper schreiben, der mir das FooMapDTO aus einer Foo Klasse so befüllt?
 
Ich habe keine Ahnung, was MapStruct ist und will mich auch nicht drüber kundig machen, aber wenn du einen Sack voll DTOs hast, kannst du die mit der stream-API in eine Map drücken:

Code:
sackVollerDtos.stream().collect(Collectors.toMap(FooDTO::getId, Function.identity()));

Oder habe ich hier was falsch verstanden? Ist MapStruct wichtig, um das Problem zu verstehen?
 
Warum Mapper? Das eine ist eine Liste aus Objekten, das andere ein einzelnes Objekt.

Schreib dir doch die notwendigen Methoden in der FooMapDTO Klasse:
boolean add(FooDTO fooDTO) // return false falls vorhanden
boolean delete(FooDTO fooDTO) // return false falls nicht vorhanen
FooDTO getFooDTO(int id)
 
@mental.dIseASe: Danke dein Vorschlag ist für mich vielleicht schon hilfreich. Allerdings geht es nicht nur darum, dass ich ein Sack voll DTO's habe, die ich in eine Map quetschen will. Ich habe quasi einen Sack voll Entity-Objekten, die ich zu DTO-Objekten ummappen möchte um sie dann in eine Map zu stecken.

@wahli meine Klassen besitzen bereits getter und setter Methoden. Die habe ich in meinem Beispiel nur weg gelassen, da ich dachte dass diese für das Verständnis keine Rolle spielen. Und ich möchte einfach aus einer Liste von Objekten eine Map mit anderen Objekten erzeugen
 
meine Klassen besitzen bereits getter und setter Methoden. Die habe ich in meinem Beispiel nur weg gelassen, da ich dachte dass diese für das Verständnis keine Rolle spielen. Und ich möchte einfach aus einer Liste von Objekten eine Map mit anderen Objekten erzeugen

Also du willst aus einer List<Klasse1> eine Map<KeyType, Klasse2> erzeugen?

Man bräuchte also eine Überführungsfunktion von Klasse1 -> Klasse2 und eine Funktion die einen Schlüssel für die Map erzeugt (Klasse1 -> KeyType).

Oder muss du das zwingend mit Annotationen / MapStruct machen?
 
@Hooo: genau das möchte ich machen.

Es ist eigentlich schon erwünscht, dass ich mapstruct dafür verwende.
 
Tut mir leid mit MapStruct habe ich keine Erfahrung.
Ich hätte es so gelöst:

K = Key
C1, C2 = Class1 und Class2

Code:
public static <K, C1, C2> Map<K, C2> map(
            List<C1> list, 
            Function<C1, K> generateKey, 
            Function<C1, C2> transform) {

     Map<K, C2> map = new HashMap<>();

     for (C1 e : list) {
         map.put(generateKey.apply(e), transform.apply(e));
     }

     return map;
}
 
Zurück
Oben