Więc byłem ciekawy, w jaki sposób poniższy kod zostałby napisany bardziej efektywnie za pomocą API strumieni danych java8.Konsumpcyjne reszta usługi w sposób funkcjonalny
public static List<FlightInfo> getResults(String origin,List<String> destinations) {
final String uri = "https://api.searchflight.com/;
List<FlightInfo> results = new LinkedList<FlightInfo>();
for(String destination:destinations) {
RestTemplate restTemplate = new RestTemplate();
String params = getParams(origin,destination);
FlightInfo result = restTemplate.postForObject(uri+params,FlightInfo.class);
results.add(result);
}
return results;
}
Po metoda ta odbywa się robi, co jej robi i ja otrzymać listę obiektów FLightInfo, jestem przekształcenie go w strumieniu i będzie robić różne transformacje na nim (przez grupy, etc). Teraz jest całkiem pewna, że jest to długotrwała operacja. Co więcej, w rzeczywistości łączy wiele wywołań reszty z usługą sieciową, więc mam już większość danych uzyskanych do czasu wykonania ostatniego połączenia, ale nie zacznę go przetwarzać przed zwróceniem całej metody.
Czy istnieje sposób, aby zrobić to trochę bardziej reaktywnie? Czy mogę natychmiastowo odesłać strumień i operację na tym strumieniu przetwarzać dane, gdy przychodzi do potoku, czy jest to zbyt dużo do zapytania? Jak to się stanie w Javie 8. Że
Czy to słuszne, aby powiedzieć, że kompletne przyszłe podejście powinno pokrywać się z przetwarzaniem z pobieraniem wyników. Wygląda na to, że w rzeczywistości jest to konsument konsumenta zmapowany do używania strumieni. W takim razie, co byś powiedział, to korzyści wynikające z tego szczególnego podejścia w stosunku do implementacji producenta - konsumenta (poza zwięzłością i brakiem zestawu narzędziowego oczywiście). Przy okazji jestem bardzo wdzięczny za dostarczone rozwiązanie i myślę, że jest świetny. Po prostu staram się zrozumieć lepiej i dlatego zadaję pytania. Jeszcze raz dziękuję – Zahari
Po prostu powyższe CompletableFuture zapewnia ładną abstrakcję dla konsumenta producenta. Cóż, jeśli wygląda na brzydkiego, co jest, ale jeśli wystąpienie powyższego wzoru jest wysokie w stosunku do kodu, to polecam przejrzeć http://github.com/ReactiveX/RxJava/wiki. Zapewnia ładne abstrakcje jako Observables (możesz myśleć jak strumień), do którego możesz mieć wyniki raz dostępne. Ponieważ abstrakcje są zdrowe, masz mocny wyraz ekspresji – Jatin