Hi,
to offer an alternative that reduces the complexity for you now and for any future developer that has to work on it :
You can avoid all loops by creating a dedicated mapper function for each lower level in your structures.
So in your case,
1) make an action with function = true, taking in a list of subservice image of the source structure, putting out a list of subserviceImage of the target structure. Do just an assign of in list to out list, and as there is only one level, all should be possible with mapping.
2) make an action with function = true, taking in a list of subserviceName of the source structure, putting out a list of subserviceName of the target structure. Again just an assign, and now in the mapping, use function 1 to map the listOfSubserviceImages.
3) now you can use a single assign to set value of variable of type Service to the value of a variable of type ProviderService, and now in the mapping, use function 2 to map the listOfSubserviceNames in it.
Hope this makes sense, see also attached OML that has a demo of this idea.
Good luck,
Dorine