package com.insightfullogic.java8.examples.chapter9;
import com.insightfullogic.java8.examples.chapter1.Artist;
import rx.Observable;
import rx.Observer;
import java.util.List;
import static java.util.stream.Collectors.toList;
public class RxExamples {
private final List<Artist> savedArtists;
private final List<String> savedArtistNames;
public RxExamples(List<Artist> savedArtists) {
this.savedArtists = savedArtists;
savedArtistNames = savedArtists.stream()
.map(Artist::getName)
.collect(toList());
}
// BEGIN search
public Observable<Artist> search(String searchedName,
String searchedNationality,
int maxResults) {
return getSavedArtists() // <1>
.filter(name -> name.contains(searchedName)) // <2>
.flatMap(this::lookupArtist) // <3>
.filter(artist -> artist.getNationality() // <4>
.contains(searchedNationality))
.take(maxResults); // <5>
}
// END search
// ------------------ FAKE LOOKUP CODE ------------------
// Again, imaginary external web services
private Observable<String> getSavedArtists() {
return Observable.from(savedArtistNames);
}
private Observable<Artist> lookupArtist(String name) {
Artist required = savedArtists.stream()
.filter(artist -> artist.getName().equals(name))
.findFirst()
.get();
return Observable.from(required);
}
// Purely for imported code sample
public void creationCodeSample() {
Observer<String> observer = null;
// BEGIN completing_observable
observer.onNext("a");
observer.onNext("b");
observer.onNext("c");
observer.onCompleted();
// END completing_observable
// BEGIN error_observable
observer.onError(new Exception());
// END error_observable
}
}