Stream katmanı
- Java kursu
- İleri seviye
- Ders 74/82
- 6 dk
Stream ileri ve Optional ile veri akışı kurarsın.
Stream ile filtreleme
Bu derste stream() ile filtreleme yapacaksın. .filter(t -> t.amount > 100) koşulu sağlayan kayıtları seçer; .toList() sonucu bir listeye toplar.
var filtered = ledger.stream()
.filter(t -> t.amount > 100)
.toList();filter bir Predicate alır; her öğeye uygulanır ve true döndürenler kalır. Bu, for-each ile manuel eleme yapmaktan daha kısadır. Sonuç yine bir listedir; boyutunu filtered.size() ile alırsın.
groupingBy ile gruplama
Collectors.groupingBy bir özelliğe göre öğeleri gruplar ve sonucu bir Map olarak döndürür. Her kategori bir anahtar olur; değer o kategorideki kayıtların listesidir.
var grouped = ledger.stream()
.collect(Collectors.groupingBy(t -> t.category));Örneğin market ve fuel farklı anahtarlar olduğundan grouped.size() kategori sayısını verir. collect terminal bir işlemdir; stream'i tüketir ve bir sonuç üretir.
Uygulama Stream ile filtrele ve grupla
Önceki dersin ledger listesini kullan. ledger.stream().filter(t -> t.amount > 100).toList() ile filtrelenmis listeyi oluştur ve filtered.size()'i yazdır. Ayrica ledger.stream().collect(Collectors.groupingBy(t -> t.category)) ile bir grouped Map oluştur ve grouped.size()'i yazdır. java.util.stream.Collectors nitelikli adını kullanabilirsin.
Başlangıç kodu
import java.util.ArrayList;
class Transaction {
String category;
int amount;
Transaction(String category, int amount) {
this.category = category;
this.amount = amount;
// Stream ile 100 ustu kayitlari filtrele ve kategoriye gore grupla
}
}
public class Main {
public static void main(String[] args) {
ArrayList<Transaction> ledger = new ArrayList<>();
ledger.add(new Transaction("market", 120));
ledger.add(new Transaction("fuel", 80));
for (Transaction t : ledger) {
System.out.println(t.category + " " + t.amount);
}
// Stream ile 100 ustu kayitlari filtrele ve kategoriye gore grupla
}
}Örnek çözüm
import java.util.ArrayList;
class Transaction {
String category;
int amount;
Transaction(String category, int amount) {
this.category = category;
this.amount = amount;
}
}
public class Main {
public static void main(String[] args) {
ArrayList<Transaction> ledger = new ArrayList<>();
ledger.add(new Transaction("market", 120));
ledger.add(new Transaction("fuel", 80));
var filtered = ledger.stream()
.filter(t -> t.amount > 100)
.toList();
var grouped = ledger.stream()
.collect(java.util.stream.Collectors.groupingBy(t -> t.category));
System.out.println(filtered.size());
System.out.println(grouped.size());
}
}Beklenen çıktı
1 2
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 filter çağrısını tamamla
var filtered = ledger.stream()
.____(t -> t.amount > 100)
.toList();
var filtered = ledger.stream()
.filter(t -> t.amount > 100)
.toList();
Açıklama: filter bir Predicate alır ve eşleşenleri seçer.
2 groupingBy(t -> t.category) ne döndürür?
- Bir liste
- Kategoriye göre Map Doğru cevap
- Bir sayı
- Bir filter
Açıklama: groupingBy bir Map döndürür; anahtar kategori, değer liste.
3 Stream kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
stream() |
Akış başlatır |
filter |
Koşula göre seçer |
toList |
Listeye toplar |
groupingBy |
Map oluşturur |