Callback czy Stream - problem teoretyczny, prawdziwego kodu nie będzie

Callback czy Stream - problem teoretyczny, prawdziwego kodu nie będzie
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:7 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
0

Jak napisałem wyżej mam problem teoretyczny co lepsze (czytelniejsze?, wydajniejsze?) - Callback czy Stream.
Czytam duży zbiór elementów z zasobu źródłowego i od razu chce zapisywać do zasobu docelowego.
Dla obu zasobów mam DAO/Repo czy jak to teraz się nazywa ogólnie obiekt opakowujący i chciałbym żeby tak pozostało że nie mieszam tych kodów.
W związku z tym że muszę na zmianę czytać po kawału i zapisywać po kawałku zastanawiam się co lepsze

Callback (consumer)

Kopiuj
sourceRepo.readAllAndConsume(destRepo.createConsumer())

Stream

Kopiuj
final Stream<Element> stream = sourceRepo.readAll()
destRepo.saveAll(stream)

Jakbym nie miał problemu dużej ilości danych to zrobiłbym prostacko

Kopiuj
final List<Element> list = sourceRepo.readAll()
destRepo.saveAll(list)

Rozwiązanie ze Streamem wydaje mi się bardziej uniwersalne, ale zastanawiam się czy nie trafię na jakieś niespodziewane problemy


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
edytowany 3x, ostatnio: KamilAdam
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
1

Ja bym dał streama. Pytanie czy te źródło danych ładnie wspiera streamy ;)


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
edytowany 1x, ostatnio: scibi92
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:7 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
0
scibi92 napisał(a):

Pytanie czy te źródło danych ładnie wspiera streamy ;)

Racja, jak chce odczytywać i zapisywać paczkami to stream nie będzie już taki łatwy do zapisania. Chyba że stream będzie zawierać paczki elementów a nie elementy, ale wtedy nie będzie już ładny ani uniwersalny :(


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:około 5 godzin
  • Postów:1881
0

Zauważ, że callback mógłby zostać użyty do implementacji tego destRepo.saveAll(stream), więc rozwiązanie ze strumieniem wydaje się być bardziej uniwersalne. Natomiast dlaczego nie zrobić tego batchowo? To jednorazowa akcja?


”Engineering is easy. People are hard.” Bill Coughran
edytowany 1x, ostatnio: Charles_Ray
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

@KamilAdam: bardziej chodziło mi o to czy jesteś wstanie rzeczywiście pobierać obiekt typu stream ze źródła. Np. w natywnym JDBC to by chyba nic nie dało bo i tak musiałbyś wciągnąć cały resultset, przynajmniej z tego co wiem


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
edytowany 1x, ostatnio: scibi92

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.