Lambdy i streamy java początki

0

Hej, powoli uczę się lambd w javie 8. Zastanawiam się jak zrobić taką metodę:

public String metoda(JakasKolekcja<String> jakasKolekcja) {
  jakasKolekcja.stream().findFirst().ifPresent(obiektKolekcji -> return obiektKolekcji);

  if(jakisOddzielnyWarunek) {
    return "Cos tam innego zwraca";
  }

  return "Ostatecznie jak nic nie pasuje to zwraca to";
}

Tylko mam problem w tej lambdzie ze zwróceniem tego obiektu. Jedyne co wymyśliłem to:

public String metoda(JakasKolekcja<String> jakasKolekcja) {
  final String[] message = new String[1];
  jakasKolekcja.stream().findFirst().ifPresent(obiektKolekcji ->  message[0] = obiektKolekcji);

  if(message[0] != null) {
            return message[0];
        }

  if(jakisOddzielnyWarunek) {
    return "Cos tam innego zwraca";
  }

  return "Ostatecznie jak nic nie pasuje to zwraca to";
}

Ale wydaje się jakieś przesadzone. Da się prościej? Pozdrawiam ;)

0
    public String planA(JakasKolekcja<String> jakasKolekcja){
        return jakasKolekcja.stream().findFirst().orElse(planB(JakasKolekcja<String> jakasKolekcja));
    }

    public String planB(JakasKolekcja<String> jakasKolekcja){
        if(jakisOddzielnyWarunek) {
            return "Cos tam innego zwraca";
        }

        return "Ostatecznie jak nic nie pasuje to zwraca to";
    }

Lambda sama w sobie jest funkcją więc nie da się z niej wyjść returnem poza nią samą. Korzystając z programowania funkcyjnego idziesz cały czas jedną ścieżką i dodajesz po prostu ścieżki dodatkowe w specyficznych przypadkach.

0

Lambdy służą do programowania funkcyjnego czyli nie zawieramy w nich skutków ubocznych.

0

Generalnie trochę przekombinowales.

To, co tutaj masz to:

  1. Szukanie po kolekcji, jeśli jest to zwracasz jako pierwsze.
  2. Sprawdzenie warunku, jeśli spelniony to A, jeśli nie to B.

Czyli:

//... 
jakasKolekcja.stream().findFirst().orElse(jakisWarunek? "A" : "B");

Java póki co jest dosyć biedna w tym względzie bo przy większej ilości takich case'ów trzebaby albo zaimportować jakąś bibliotekę, albo samemu wyrzezbic buikdera z case.

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