john
john

Reputation: 1125

mapstruct convert list to map

I am a very new to mapstruct. I am trying to convert List to Map, I've searched a lot online, I've got some solutions like its not yet implemented in mapstruct seems. I will be glad if someone could able to provide some alternative solution. All I am looking to convert mapping as below:

@Mapping
Map<String, Object> toMap(List<MyObj>)

@Mapping
    List<MyObj> toList(Map<String, Object>)

where MyObj as below:

class MyObj {
  String key; //map key
  String value; //map value
  String field1;
}

In above, only use key and value fields from MyObj class. I've found one solution but below is converting some object to MAP, but using Jackson below:

@Mapper
public interface ModelMapper {

  ObjectMapper OBJECT_MAPPER = new ObjectMapper();

  default HashMap<String, Object> toMap(Object filter) {
    TypeFactory typeFactory = OBJECT_MAPPER.getTypeFactory();
    return OBJECT_MAPPER.convertValue(filter, typeFactory.constructMapType(Map.class, String.class, Object.class));
  }
}

is there anyway now to implement using mapstruct?

Upvotes: 1

Views: 6586

Answers (1)

Karthik R
Karthik R

Reputation: 5786

Map struct doesn't have implicit conversion for your desired List to Map. You can have a custom mapping method as follows:

@Mapper
public interface FooMapper {


    default Map<String, Foo> convertFooListToMap(List<Foo> foos) {
      // custom logic using streams or however you like.
    }
}

Other options include custom mapper implementations that you write and refer with something like @Mapper(uses=CustomMapper.class)

Upvotes: 4

Related Questions