3 zagnieżdżone pętle - uproszczenie

0

Cześć Panowie. Pracuję nad kodem i muszę z głównego obiektu wyciągnąć obiekt spelniający pewne założenia. Obiekt główny jest mocno skomplikowany i zawiera w sobie listy obiektów, które zawierają swoje listy obiektów itp

Od razu widać, że wychodzi z tego arrow anty-pattern. Czy ktoś mógłby mi doradzić jak to uprościć, by wyglądało to bardziej elegancko ? Próbowałem streamami, ale 3 pętle to już trochę za dużo i się gubię.

3

Złamane jest prawo Demeter (pomimo, że są to dtosy, a nie obiekty, wyglada to słabo). Ze streamami będzie to samo, a nawet gorzej (mniej czytelnie, dyskusyjne).

Deleguj wykonanie tych pętli do kolejnych obiektów w zagnieżdżeniu, to będziesz miał po jednym forze. Może zauważysz coś więcej i poprawisz w kolejnym kroku. Niestety jestem na wakacjach i nie mam dostępu do IDE :)

3
RezyserKinaAkcji napisał(a):

Cześć Panowie.

Panie tu też są

Pracuję nad kodem i muszę z głównego obiektu wyciągnąć obiekt spelniający pewne założenia. Obiekt główny jest mocno skomplikowany i zawiera w sobie listy obiektów, które zawierają swoje listy obiektów itp

Wklej kod jako tekst

Od razu widać, że wychodzi z tego arrow anty-pattern. Czy ktoś mógłby mi doradzić jak to uprościć, by wyglądało to bardziej elegancko ? Próbowałem streamami, ale 3 pętle to już trochę za dużo i się gubię.

Przy streamach też będziesz miał arrow anty-pattern (może mniejszy o jeden czy dwa poziomy) bo Java dalej nie ma For Comprehensions.
Ogólnie algorytm jest for zamień na metodę flatmap za wyjątkiem ostatniego for który pewnie powinieneś zamienić na map

1

Streamy:

List<DigitalContentTileDTO> result = digitalContentsViewDTO.getPaginated().stream()
	.flatMap(e -> e.getPages().stream())
	.flatMap(e -> e.getContents().stream())
	.filter(e -> e.getVisibilityChanged())
	.filter(e -> !e.getIsHidden())
	.collect(Collectors.toList());

Bez zmiany modelu prościej się nie da.

3

Problem polega na tym że próbujesz zrobić logikę domenową na DTOsach zamiast na obiektach domenowych i dlatego wychodzi taka kupa. Powinieneś pracować na obiektach które zawierają logikę i wtedy taki problem w ogóle nie występuje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1