Znalazłem następujący kod, który dodaje element w pewnych okolicznościach (jeśli nie jest OLD) do listy. Ta lista zostanie później spakowana na wspólną listę kontrolną.Utworzenie refaktora listy ze strumieniami java 8
List<ListDataContent> list = new ArrayList<>();
for (KonditionValue kondition : konditions) {
if (kondition.getStatusKz().equals(StatusKz.OLD))
continue;
for (TermKondValue tilg : kondition.getTermimKonditions()) {
if (tilg.getStatusKz().equals(StatusKz.OLD))
continue;
TerminKondListContent listContent = new TerminKondListContent(tilg, kondition.getChangeDatum(), funds);
list.add(listContent);
}
}
SimpleListControl listCtrl = new SimpleListControl();
listCtrl.setDataModel(new ListDataModel(list));
Próbowałem następujące refaktoryzacji korzystając java8 strumienie:
List<ListDataContent> list = konditionen.stream().map(kondition -> map(tilg, kondition.getChangeDate(), funds)).sorted().collect(Collectors.toList());
SimpleListControl listCtrl = new SimpleListControl();
listCtrl.setDataModel(new ListDataModel(list));
problemu jest metoda mapy ...
private TerminKondListContent map(TermKondValue tilg, Date changeDate, BigDecimal funds) {
if (kondition.getStatusKz().equals(StatusKz.OLD))
return null;
for (TermKondValue zins : kondition.getTerminkonditions()) {
if (zins.getStatusKz().equals(StatusKz.OLD))
return null;
return new TerminKondListContent(tilg, changeDate, funds);
}
return null;
}
Co mogę zrobić w przypadkach kontynuować? return null? Mogłabym następnie filtrować wartości zerowe wartości ze strumienia poprzez: Czy korzystanie z opcji jest tutaj opcjonalne?
To powinno zadziałać. Nie sądzisz, że trudno to odczytać? Moje rozwiązanie wygląda na bardziej czytelne. Chociaż nadal nie jestem pewien, co zrobić z "return null" w tym przypadku. – Chris311
@ Chris311 Twoje rozwiązanie jest mieszanką starego kodu. Myślę, że to trochę trudne do odczytania, dlatego utrzymanie pętli for nie byłoby złym pomysłem. – Tunaki
OK, nie będę używać tutaj stream-refactoring java8 :-) – Chris311