map
- Java kursu
- Orta seviye
- Ders 108/116
- 5 dk
map ile eleman dönüştürmeyi öğrenirsin.
map ile dönüşüm
map(Function) her elemanı yeni bir değere dönüştürür ve yeni bir Stream döndürür. Function<T, R> tek apply(T) metodu olan functional interface'dir; T girdi, R çıktı türüdür.
Örnek: names.stream().map(s -> s.length()) her String'i uzunluğuna dönüştürür; sonuç bir Stream<Integer>'dır. map dönüşümdür; eleman sayısını değiştirmez. Tür değişse bile akış ilerler.
mapToInt ve tür özelleştirme
Map sonucu ilkel türler için mapToInt, mapToLong, mapToDouble kullanılır. Bunlar IntStream, LongStream, DoubleStream döndürür; sum(), average() gibi ilkel işlemlere izin verir.
Örneğin names.stream().mapToInt(s -> s.length()).sum() isim uzunluklarının toplamını verir. Bu, map(s -> s.length()).reduce(0, (a, b) -> a + b)'den daha derli topludur. Optional dönen average() ise .orElse(0.0) ile güvenli okunur.
Uygulama İsim uzunluklarını topla
List<String> names = new ArrayList<>(); tanımla; "Ayşe", "Alex" ekle. int sum = names.stream().mapToInt(s -> s.length()).sum(); ile isim uzunluklarının toplamını hesapla. System.out.println(sum); ile yazdır.
Başlangıç kodu
import java.util.List;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// List<String> tanımla, iki isim ekle, mapToInt+sum ile uzunlukları topla, yazdır
}
}Örnek çözüm
import java.util.List;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("Ayşe");
names.add("Alex");
int sum = names.stream().mapToInt(s -> s.length()).sum();
System.out.println(sum);
}
}Beklenen çıktı
8
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 map kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
map(...) |
Her elemanı dönüştürür |
Function<T, R> |
Dönüşüm fonksiyonu |
apply(T) |
R türünde sonuç |
s -> s.length() |
Lambda Function |
2 map çağrısını tamamla
names.stream().____(s -> s.length())
names.stream().map(s -> s.length())
Açıklama: map metodu Function bekler.
3 names.stream().map(s -> s.length()) ne döndürür?
- Stream<String>
- Stream<Integer> Doğru cevap
- long
- List<Integer>
Açıklama: map her String'i Integer'a dönüştürür; sonuç Stream<Integer>'dır.