protected ApplicationDTO mergeApplications(ApplicationDTO leftApplication, ApplicationDTO rightApplication) { final List<ScriptDTO> scripts = mergeListOfDtos(leftApplication.getScripts(), rightApplication.getScripts(), ScriptDTO::getScriptName, ScriptDTO.nameComparator()); final List<ResourceDTO> resources = mergeListOfDtos(leftApplication.getResources(), rightApplication.getResources(), ResourceDTO::getName, ResourceDTO.nameComparator()); final List<URI> mergeMiniatures = mergeMiniatures(leftApplication.getMiniatures(), rightApplication.getMiniatures()); return new ApplicationDTO.Builder() .withCategoryId(leftApplication.getCategoryId()) .withId(leftApplication.getId()) .withName(leftApplication.getName()) .withResources(resources) .withScripts(scripts) .withDescription(leftApplication.getDescription()) .withIcon(leftApplication.getIcon()) .withMiniatures(mergeMiniatures) .build(); }