You could also create a "wrapper" method (getFirstElement) on the SourceObject:
public class SourceObject {
public ArrayList<ListObject> list = new ArrayList<ListObject>();
public SourceObject() {
list.add(new ListObject());
}
public getFirstElement(){
return list.get(0);
}
So in your initial mapping you can say:
@Mappings({
@Mapping(target="details.forename", source="firstElement.details.forename"),
@Mapping(target="details.surname", source="firstElement.details.surname"),
})
DestinationObject toDestination(SourceObject source);