Wpis z mikrobloga

#java
Mirki mam taki przypadek. Mam listę i jeżeli jest ona nullem lub jest pusta to chce zwrócić "nic", w przeciwnym wypadku chce połączyć te strinig (i wcześniej cos z nimi zrobić) w jedna całość po przecinku:

private String mirko(List list) {
if (list == null || list.isEmpty()) {
return "nic";
} else {
return list.stream()
.map(this::mask)
.collect(Collectors.joining(", "));
}
}

Czy mogę to jakoś zrobić bez użycia if'a tylko przy pomocy Optional? Nie umiem znaleźć konstrukcji która pozwalałaby mi opakować tą listę w
Optional.of(list).
.map(this::mask)
.collect(Collectors.joining(", "))
.orElse("nic")
  • 14
  • Odpowiedz
@Xonar: No to wiem, może źle się wyraziłem. Po filtrowaniu mogę wykonywać operację na tym optionalu, a ja chcę wykonywać operację na liście:
Optional.of(list).
.filter(Object:nonNull)
.map(this::jakasOperacjaNaElementachListy) // i tu chce mapowac elementy z listy, a nie liste
.collect(Collectors.joining(",
  • Odpowiedz
@kot_gagarina:

Człowieku po Ci ten optional?

Po nic, jestem po prostu ciekawy czy istnieje taka konstrukcja

Przecież tam nawet else nie jest potrzebny!

W tym konkretnym przypadku nie. Jest to uproszczony przykład, u mnie po if nie ma return tylko jest dodanie "nic" do mapy
  • Odpowiedz
@Patres: Funkcja, której szukasz, nazywa sie fold. Niestety nie jest ona dostępna w Javowym Optionalu :( W Scali wyglądałoby to tak:

Option(list).filter(_.nonEmpty).fold("nic")(_.mkString(", "))
  • Odpowiedz