< Hasscript />
popular Tags
Java #297 Genel Kavramlar #295 Veri Tabanı #220 oracle #84 Sunucular #81
→ View All Tags
top Authors
kenan 485 tolgacelik.art 341 kupanintorunu 49 canonka 36 buzel 32
→ View All Authors
→ Tags
popular Tags
#Java #Genel Kavramlar #Veri Tabanı #oracle #Sunucular
→ Authors
top Authors
@kenan @tolgacelik.art @kupanintorunu @canonka @buzel
/**
* @author one piece
* @date 2020-05-15
* @tags Java
*/

question stream flatmap kullanarak Object[] – nesne dönüştürme nasıl yapılır?

comments 2 references
  1. // @author kenan | 21 Temmuz 2020

    Öncelike bir map örneğiyle başlayalım ve onu geliştirerek flatmap şekline çevirerek ilerleyelim. 

    Elimizde bir tamsayı değerler bulunduran bir liste olduğunu varsayalım ve bu listedeki bütün elemanların karelerini alarak yeni bir listeye atmak isteyelim. İlk olarak for döngüsü ile yapalım.

    	public static void main(String[] args) {
    		List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
    		List<Integer> squares = new ArrayList<>();
    		for (int i : numbers) {
    			squares.add(i * i);
    		}
    		squares.forEach(System.out::println);
    	}

    Sonra bunu java 8 streams kullanarak yapmayı deneyelim.

    public static void main(String[] args) {
    		List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
    		List<Integer> squares =  numbers.stream().map(i-> i*i).collect(Collectors.toList());
    		squares.forEach(System.out::println);
    	}

    Buraya kadar güzel. Peki elimizdeki sayılar birden fazla listenin birleştirilmesiyle yapılsaydı nasıl olurdu?

    public static void main(String[] args) {
    		List<List<Integer>> numbers = new ArrayList<>();
    		numbers.add(Arrays.asList(1, 2));
    		numbers.add(Arrays.asList(3,4,5,6));
    		numbers.add(Arrays.asList(7,8,9,0));
    		
    		List<Integer> squares =  numbers.stream().map(i-> i*i).collect(Collectors.toList());
    		squares.forEach(System.out::println);
    	}

    Bu şekilde bir kod parçası numbers.stream().map dediğimiz kısımda derleme hatası verecektir. Çünkü elimideki listede (numbers) sırasıyla numaralar yok. Onun yerine iç içe listeler var.

    {
     {1,2},
     {3,4,5,6},
     {7,8,9,0}
    }

    Bu şekilde bir liste için elemanların hepsini doğrusal bir şekilde (yanyana) almak için iki farklı kod yazabiliriz. Geleneksel for döngüsü ile şu şekilde olur

    	public static void main(String[] args) {
    		List<List<Integer>> numbers = new ArrayList<>();
    		numbers.add(Arrays.asList(1, 2));
    		numbers.add(Arrays.asList(3,4,5,6));
    		numbers.add(Arrays.asList(7,8,9,0));
    		
    		List<Integer> squares = new ArrayList<Integer>();
    		for(List<Integer> l: numbers) {
    			for(Integer i : l) {
    				squares.add(i * i);
    			}
    		}
    		squares.forEach(System.out::println);
    	}

    En nihayetinde kodumuzu azaltmak vedaha okunur yapmak için flatmap kullanabiliriz. O da şöyle oluyor.

    	public static void main(String[] args) {
    		List<List<Integer>> numbers = new ArrayList<>();
    		numbers.add(Arrays.asList(1, 2));
    		numbers.add(Arrays.asList(3, 4, 5, 6));
    		numbers.add(Arrays.asList(7, 8, 9, 0));
    
    		List<Integer> squares = numbers.stream()
    				.flatMap(l -> l.stream())
    				.map(i -> i * i).collect(Collectors.toList());
    
    		squares.forEach(System.out::println);
    	}

    Unutmamamız gereken flatmap uyguladığımız zaman elimizdeki bütün elemanlar bir listeye eklenmiş gibi davranacak, bu problemde sayıların karesini almak için yine map uygulamamız gerekiyor.

    1. // @author kenan | 27 Temmuz 2020

      Burda da resim ile anlatılmaya çalışılmış.

// Comments are closed.

// Hasscript © 2026
// Powered by Coffee & Code