Arama ve filtreleme
- Java kursu
- Orta seviye
- Ders 68/116
- 6 dk
Stream ile arama ve filtreleme yazarsın.
Başlığa göre arama
Blog büyüdükçe belirli bir yazıyı bulmak gerekir. findByTitle(String keyword) metodu, posts listesinde dolaşıp başlığında keyword geçen yazıları yeni bir listeye toplar.
Java'da String.contains(keyword) metodu alt dize denetimi yapar. title.contains("Java") true dönerse o yazıyı sonuca ekleriz. Arama büyük/küçük harfe duyarlıdır; duyarsız arama için toLowerCase() kullanılır.
Yeni liste ile sonuç toplama
Arama metodu içinde boş bir List<Post> result = new ArrayList<>(); oluşturursun. Döngüde her yazıyı denetler, eşleşenleri result.add(post) ile eklersin. Döngü sonunda return result; ile listeyi döndürürsün.
Bu desen, orijinal listeyi değiştirmeden filtreleme yapmanın en kolay yoludur. Akış API'si (stream) ile de yapılabilir ama burada klasik döngüye odaklanıyoruz.
Uygulama findByTitle metodunu ekle
Üstteki Blog sınıfına List<Post> findByTitle(String keyword) metodu ekle. İçinde List<Post> result = new ArrayList<>(); oluştur, for (Post post : posts) döngüsü ile her yazının title.contains(keyword) denetimini yap, eşleşenleri result.add(post) ile ekle ve return result; döndür. main içinde blog'a iki yazı ekle (biri "Java" içersin), blog.findByTitle("Java") çağrısının size()'ını yazdır.
Başlangıç kodu
import java.util.List;
import java.util.ArrayList;
class Post {
String title;
String author;
Post(String title, String author) {
this.title = title;
this.author = author;
}
}
class Comment {
String author;
String text;
Comment(String author, String text) {
this.author = author;
this.text = text;
}
}
class Blog {
List<Post> posts = new ArrayList<>();
void addPost(Post post) { posts.add(post); }
}
// Blog sınıfına findByTitle metodu ekle
// main: iki yazı ekle, "Java" ara ve eşleşme sayısını yazdırÖrnek çözüm
class Post {
String title;
String author;
Post(String title, String author) {
this.title = title;
this.author = author;
}
}
class Comment {
String author;
String text;
Comment(String author, String text) {
this.author = author;
this.text = text;
}
}
class Blog {
List<Post> posts = new ArrayList<>();
void addPost(Post post) { posts.add(post); }
List<Post> findByTitle(String keyword) {
List<Post> result = new ArrayList<>();
for (Post post : posts) {
if (post.title.contains(keyword)) {
result.add(post);
}
}
return result;
}
}
public class Main {
public static void main(String[] args) {
Blog blog = new Blog();
blog.addPost(new Post("Java giriş", "Ayşe"));
blog.addPost(new Post("Diğer", "Mehmet"));
System.out.println(blog.findByTitle("Java").size());
}
}Beklenen çıktı
1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Alt dize denetimini tamamla
if (post.title.____(keyword)) {
result.add(post);
}
if (post.title.contains(keyword)) {
result.add(post);
}
Açıklama: contains metodu alt dizeyi arar.
2 title.contains("Java") ne zaman true döner?
- title tam olarak Java'ya eşitse
- title içinde Java alt dizesi geçiyorsa Doğru cevap
- title Java ile başlıyorsa
- title boş bir dizeyse
Açıklama: contains alt dize denetimi yapar; eşitlik veya başlangıç şart değildir.
3 Arama kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
contains |
Alt dize denetimi |
findByTitle |
Başlığa göre arama metodu |
result |
Eşleşen yazıların listesi |
toLowerCase |
Büyük/küçük harf duyarsız arama |