### Question:
DokumenteUtil { public static Set<DokumentGrund> mergeNeededAndPersisted(Set<DokumentGrund> dokumentGrundsNeeded, Collection<DokumentGrund> persistedDokumentGrunds, Gesuch gesuch) { Set<DokumentGrund> dokumentGrundsMerged = new HashSet<>(); Set<DokumentGrund> persistedDokumentAdded = new HashSet<>(); for (DokumentGrund dokumentGrundNeeded : dokumentGrundsNeeded) { Set<DokumentGrund> persistedForNeeded = getPersistedForNeeded(persistedDokumentGrunds, dokumentGrundNeeded, gesuch); if (!persistedForNeeded.isEmpty()) { persistedDokumentAdded.addAll(persistedForNeeded); dokumentGrundsMerged.addAll(persistedForNeeded); } else { dokumentGrundsMerged.add(dokumentGrundNeeded); } } persistedDokumentGrunds.removeAll(persistedDokumentAdded); for (DokumentGrund persistedDokumentGrund : persistedDokumentGrunds) { persistedDokumentGrund.setNeeded(false); dokumentGrundsMerged.add(persistedDokumentGrund); } return dokumentGrundsMerged; } private  DokumenteUtil(); static Set<DokumentGrund> mergeNeededAndPersisted(Set<DokumentGrund> dokumentGrundsNeeded, Collection<DokumentGrund> persistedDokumentGrunds, Gesuch gesuch); static int compareDokumentGrunds(DokumentGrund persistedDok, DokumentGrund neededDok, final Gesuch gesuch); @Nonnull static String getFileNameForGeneratedDokumentTyp(final GeneratedDokumentTyp typ, final String identificationNumber);  }### Answer:
@Test public void testAllPersistedInNeeded() { Set<DokumentGrund> dokumentGrundsNeeded = new HashSet<>(); final Gesuch gesuch = new Gesuch(); Collection<DokumentGrund> persistedDokumentGrunds = new HashSet<>(); createGrundNeeded(dokumentGrundsNeeded, DokumentGrundTyp.FAMILIENSITUATION, DokumentTyp.JAHRESLOHNAUSWEISE); createGrundNeeded(dokumentGrundsNeeded, DokumentGrundTyp.FAMILIENSITUATION, DokumentTyp.STEUERERKLAERUNG); createGrundNeeded(dokumentGrundsNeeded, DokumentGrundTyp.ERWERBSPENSUM, DokumentTyp.NACHWEIS_AUSBILDUNG); createGrundPersisted(persistedDokumentGrunds, DokumentGrundTyp.FAMILIENSITUATION, DokumentTyp.JAHRESLOHNAUSWEISE, 3); final Set<DokumentGrund> mergeNeededAndPersisted = DokumenteUtil.mergeNeededAndPersisted(dokumentGrundsNeeded, persistedDokumentGrunds, gesuch); Set<DokumentGrund> mergedFamsit = getByGrundTyp(mergeNeededAndPersisted, DokumentGrundTyp.FAMILIENSITUATION); Assert.assertNotNull(mergedFamsit); Assert.assertEquals(mergedFamsit.size(), 2); Assert.assertEquals(3, getByDokumentType(mergedFamsit, DokumentTyp.JAHRESLOHNAUSWEISE).size()); Assert.assertEquals(1, getByDokumentType(mergedFamsit, DokumentTyp.STEUERERKLAERUNG).size()); Set<DokumentGrund> mergedERWERBSPENSUM = getByGrundTyp(mergeNeededAndPersisted, DokumentGrundTyp.ERWERBSPENSUM); Assert.assertNotNull(mergedERWERBSPENSUM); Assert.assertEquals(mergedERWERBSPENSUM.size(), 1); Assert.assertEquals(1, getByDokumentType(mergedERWERBSPENSUM, DokumentTyp.NACHWEIS_AUSBILDUNG).size()); }