III. Obsługa wielu strumieni
-
Dodaj obsługę wielu zapytań o zdjęcia. W tym celu stwórz metody
PhotoCrawler#downloadPhotosForMultipleQueries(List<String)orazPhotoDownloader#searchForPhotos(List<String>). MetodasearchForPhotos(List<String>)powinna również zwracać obiektObservable<Photo>.
Możesz wykorzystać i przerobić poniższy kod:public List<Photo> searchForPhotos(List<String> searchQueries) throws IOException { List<Photo> photos = new ArrayList<>(); for (String searchQuery : searchQueries) { photos.addAll(searchForPhotos(searchQuery)); } return photos; }Operacje do wykorzystania:
Merge(opens in a new tab) lubFlatMap(opens in a new tab) -
Uruchom aplikację używając przygotowanych metod dla wszystkich zapytań
TOPICS, zdefiniowanych wCrawlerApp. Odpowiedz na pytanie: w jakiej kolejności pojawiają się na dysku zdjęcia z podanych zapytań? -
Zmodyfikuj metodę
PhotoDownloader#searchForPhotos(List<String>)tak aby zapytania były przetwarzane w wielu wątkach. Wykorzystaj Scheduler (opens in a new tab) o nazwie io, zoptymalizowany pod obsługę operacji we/wy.💡Jeśli uruchomimy pobieranie zdjęć w innych wątkach niż wątek główny aplikacji, metoda
mainskończy się prawdopodobnie zanim wszystkie operacje dobiegną końca i program zostanie przerwany. Dlatego należy zadbać o to by główny wątek poczekał na pozostałe - najprościej w tym celu dodać na końcu funkcjimainwywołanieThread.sleep(100_000).
Operacje do wykorzystania: SubscribeOn (opens in a new tab)