Stream katmanı
- Java kursu
- İleri seviye
- Ders 79/82
- 6 dk
Stream ileri ve Optional ile veri işleme yazarsın.
Stream ile filtreleme
Bu derste stream() ile önem seviyesi yüksek olayları filtreleyeceksin. .filter(e -> e.severity > 2) koşulu sağlayan olayları seçer; .count() sonuç sayısını verir.
long count = log.stream()
.filter(e -> e.severity > 2)
.count();count terminal bir işlemdir; stream'i tüketir ve bir long döndürür. Bu, for-each ile elle saymaktan daha kısadır. Filtrelenen olay sayısı böylece tek satırda elde edilir.
groupingBy ile gruplama
Collectors.groupingBy bir özelliğe göre olayları gruplar ve sonucu bir Map olarak döndürür. Her tip bir anahtar olur; değer o tipteki olayların listesidir.
var grouped = log.stream()
.collect(Collectors.groupingBy(e -> e.type));Örneğin info, error ve warn farklı anahtarlar olduğundan grouped.size() tip sayısını verir. collect terminal bir işlemdir.
Uygulama Stream ile filtrele ve grupla
Önceki dersin log listesine üçüncü olayı ekle (warn 3). log.stream().filter(e -> e.severity > 2).count() ile filtrelenen sayıyı bul ve yazdır. Ayrıca log.stream().collect(Collectors.groupingBy(e -> e.type)) ile bir grouped Map oluştur ve grouped.size()'i yazdır.
Başlangıç kodu
import java.util.ArrayList;
import java.util.stream.Collectors;
class Event {
String type;
int severity;
Event(String type, int severity) {
this.type = type;
this.severity = severity;
}
}
public class Main {
public static void main(String[] args) {
ArrayList<Event> log = new ArrayList<>();
log.add(new Event("info", 1));
log.add(new Event("error", 5));
// Ucuncu olayi ekle (warn 3)
// Stream ile severity > 2 olanlari filtrele ve say
// groupingBy ile type'a gore grupla
}
}Örnek çözüm
import java.util.ArrayList;
import java.util.stream.Collectors;
class Event {
String type;
int severity;
Event(String type, int severity) {
this.type = type;
this.severity = severity;
}
}
public class Main {
public static void main(String[] args) {
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();
var grouped = log.stream().collect(Collectors.groupingBy(e -> e.type));
System.out.println(count);
System.out.println(grouped.size());
}
}Beklenen çıktı
2 3
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 count çağrısını tamamla
long count = log.stream()
.filter(e -> e.severity > 2)
.____();
long count = log.stream()
.filter(e -> e.severity > 2)
.count();
Açıklama: count() stream'deki öğelerin sayısını döndürür.
2 filter(e -> e.severity > 2).count() ne döndürür?
- Bir liste
- Bir Map
- Bir long sayı Doğru cevap
- Bir String
Açıklama: count() bir long döndürür.
3 Stream kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
stream() |
Akış başlatır |
filter |
Koşula göre seçer |
count |
Sayıyı döndürür |
groupingBy |
Map oluşturur |