Implementacja asynchronicznego potoku przetwarzania danych
Tworzysz panel analityczny, który musi pobierać dane użytkowników i dzienniki aktywności z osobnych serwisów, a następnie przetwarzać je w celu wygenerowania podsumowania użytkownika. Operacja ta powinna być wykonywana asynchronicznie, aby aplikacja pozostawała responsywna. Twoim zadaniem jest zaimplementowanie tego mechanizmu przy użyciu CompletableFuture.
Klasy UserData i UserSummary zostały wcześniej załadowane.
To ćwiczenie jest częścią kursu
Optymalizacja kodu w Javie
Instrukcje do ćwiczenia
- Dodaj pobieranie danych użytkownika w
CompletableFuture. - Dodaj przetwarzanie danych użytkownika w
CompletableFuture. - Dodaj obsługę wyjątków w
CompletableFuture.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
public class AsyncDashboard {
public static void main(String[] args) throws Exception {
CompletableFuture userSummaryFuture = CompletableFuture
// Fetch the user data
.____(() -> fetchUserData("user123"))
// Create summary based on fetched data
.____(userData -> createSummary(userData))
// Add exception handling
.____(ex -> new UserSummary(new UserData("error", "Error User")));
Thread.sleep(5000);
}
private static UserData fetchUserData(String userId) {
simulateNetworkLatency(300);
return new UserData(userId, "John Doe");
}
private static UserSummary createSummary(UserData userData) {
simulateNetworkLatency(200);
return new UserSummary(userData);
}
private static void simulateNetworkLatency(int millis) {
try { Thread.sleep(millis); } catch (InterruptedException e) {}
}
}