Birleştirme
- Java kursu
- İleri seviye
- Ders 82/82
- 6 dk
Tüm ileri konuları birleştirerek çalışan bir uygulama yazarsın.
Birleştirme
Son derste tüm katmanları birleştirirsin. main içinde şu akışı calistiracaksin:
logüzerine stream filtreleme uygula ve sayıyı yazdır.ExecutorServiceile toplam önem seviyesini hesapla ve yazdır.reflectioniledescribemetodunu çağır ve sonucu yazdır.
Tüm bu adımlar deterministik olduğundan çıktı her seferinde aynıdır. Bu, ileri düzey bir uygulamanın nasıl katman katman kurulduğunu gösterir.
Uygulama Tüm akışı birleştir
Önceki dersin çözümünü kullan. main içinde şunları ekle: log.stream().filter(e -> e.severity > 2).count() ile filtrelenen olay sayısını bul ve yazdır. ExecutorService ile tüm önem seviyelerini topla, pool.submit(task).get() ile al ve yazdır. reflection ile describe metodunu çağır ve sonucu yazdır.
Başlangıç kodu
import java.util.ArrayList;
import java.util.concurrent.*;
import java.lang.reflect.*;
import java.util.stream.Collectors;
class Event {
String type;
int severity;
Event(String type, int severity) {
this.type = type;
this.severity = severity;
}
}
@interface Logged {
String value();
}
class EventService {
@Logged("audit")
public String describe() {
return "event-service";
}
}
public class Main {
public static void main(String[] args) throws Exception {
ArrayList<Event> log = new ArrayList<>();
log.add(new Event("info", 1));
log.add(new Event("error", 5));
log.add(new Event("warn", 3));
// Birlestir: stream filter, concurrent toplam, reflection describe
}
}Örnek çözüm
import java.util.ArrayList;
import java.util.concurrent.*;
import java.lang.reflect.*;
import java.util.stream.Collectors;
class Event {
String type;
int severity;
Event(String type, int severity) {
this.type = type;
this.severity = severity;
}
}
@interface Logged {
String value();
}
class EventService {
@Logged("audit")
public String describe() {
return "event-service";
}
}
public class Main {
public static void main(String[] args) throws Exception {
ArrayList<Event> log = new ArrayList<>();
log.add(new Event("info", 1));
log.add(new Event("error", 5));
log.add(new Event("warn", 3));
long count = log.stream().filter(e -> e.severity > 2).count();
ExecutorService pool = Executors.newSingleThreadExecutor();
Callable<Integer> task = () -> {
int sum = 0;
for (Event e : log) sum += e.severity;
return sum;
};
int total = pool.submit(task).get();
pool.shutdown();
EventService service = new EventService();
Method m = EventService.class.getMethod("describe");
String result = (String) m.invoke(service);
System.out.println(count);
System.out.println(total);
System.out.println(result);
}
}Beklenen çıktı
2 9 event-service
Uygulama Özet: mini entegrasyon
Yeni bir Summary sınıfı tanımla. İçerisinde void run() yöntemi olsun; bu yöntem üç olaylı bir ArrayList<Event> oluştursun, stream ile filter(e -> e.severity > 2).count() ve for-each ile toplam seviyeyi ayrı satırlarda yazdırsın. main içinde new Summary().run() çağır.
Başlangıç kodu
import java.util.ArrayList;
class Event {
String type;
int severity;
Event(String type, int severity) {
this.type = type;
this.severity = severity;
}
}
// Summary sınıfını tanımla
public class Main {
public static void main(String[] args) {
// Summary ornegini çalıştır
}
}Örnek çözüm
import java.util.ArrayList;
class Event {
String type;
int severity;
Event(String type, int severity) {
this.type = type;
this.severity = severity;
}
}
class Summary {
void run() {
ArrayList<Event> log = new ArrayList<>();
log.add(new Event("info", 1));
log.add(new Event("error", 5));
log.add(new Event("warn", 3));
long count = log.stream().filter(e -> e.severity > 2).count();
int total = 0;
for (Event e : log) total += e.severity;
System.out.println(count);
System.out.println(total);
}
}
public class Main {
public static void main(String[] args) {
new Summary().run();
}
}Beklenen çıktı
2 9
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Birleştirme dersinde hangi katmanlar birlikte çalışır?
- Yalnızca Stream
- Stream, Concurrent ve Reflection Doğru cevap
- Yalnızca Concurrent
- Yalnızca Reflection
Açıklama: Stream, Concurrent ve Reflection katmanları aynı main içinde çalışır.
2 Future.get çağrısını tamamla
ExecutorService pool = Executors.newSingleThreadExecutor();
Callable<Integer> task = () -> { /* toplam */ return 9; };
int total = pool.submit(task).____();
ExecutorService pool = Executors.newSingleThreadExecutor();
Callable<Integer> task = () -> { /* toplam */ return 9; };
int total = pool.submit(task).get();
Açıklama: get() sonucu hazır olana dek bekler ve döndürür.
3 Proje özetini eşleştir
| Kavram | Anlamı |
|---|---|
Event |
Model sınıfı |
Stream filter |
Yüksek önem olaylar |
ExecutorService |
Concurrent toplam |
@Logged |
Reflection işareti |