CodeBlanks Logo Icon CodeBlanks

Birleştirme

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:

  1. log üzerine stream filtreleme uygula ve sayıyı yazdır.
  2. ExecutorService ile toplam önem seviyesini hesapla ve yazdır.
  3. reflection ile describe metodunu ç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

Main.java
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

Main.java
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

Main.java
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

Main.java
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

Soru
ExecutorService pool = Executors.newSingleThreadExecutor();
Callable<Integer> task = () -> { /* toplam */ return 9; };
int total = pool.submit(task).____();
Cevap
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

İleri seviye bölümündeki tüm dersler