24 Mayıs 2020 Pazar

JAVA 8 STREAM API ORNEKLERI

Merhaba,
Bu yazimda Stream API uzerinden genel ornekler gostermeye calisacagim.

Oncelikle elimizdeki datayi stream e cevirmemiz lazim. Sonra elimizdeki data birden coksa o halde forEach kullanmamiz lazim. 

List names = Arrays.asList("John", "Jack", "Kate", "Sawyer","Hurley", "John");
names.stream().forEach(System.out::println);

  • Burada elimizde bir liste var. ve biz bu listeyi yazdirmak icin once stream e donusturduk. Sonra da hic bir islem yapmadan direkt yazdiracagimiz icin forEach ile donup yazdirdik.

Ciktimiz:
John
Jack
Kate
Sawyer
Hurley
John

Eger data uzerinde kontrol yapmak istiyorsak once kontrolu yapmali sonra datayi gostermeliyiz. Kontrolu filter ile yapip datayi forEach ile gosterecegiz.

  • Isimlerden uzunlugu 4 olanlari gostermeye calisalim:

names.stream().filter(name -> name.length() == 4).forEach(System.out::println);

Gordugumuz gibi once stream e cevirdik. Sonra filter ile kontrolumuzu yaptik. Sonra da 4 olan eleman sayisi 1den cok oldugu icin uzerinde forEach ile donduk ve yazdirdik.

Ciktimiz: 
John
Jack
Kate
John
  • Gordugumuz gibi listede ayni elemandan 2 tane var. Sadece distinct elemanlari gostermek icin distinct() kullanmaliyiz. Bu da bir konrol oldugu icin once stream e cevircez sonra distinct kontrolu yapicaz, sonra da bulduklarimizi yazdirmak icin forEach cagiracagiz.
names.stream().distinct().forEach(System.out::println);
Ciktimiz:

John
Jack
Kate
Sawyer
Hurley
  • Simdi de listemizdeki elemanlari siralayalim ve bunu gosterelim. Bu da bir kontrol old icin once stream, sonra sirala sonra da forEach ile goster.
names.stream().sort().forEach(System.out::println); 

Ciktimiz:
Hurley
Jack
John
John
Kate
Sawyer

  • Simdi ise listemizdeki isimleri upper case 'e donusturelim. Burada map kullanacagiz. Map fonksiyon alir ve veriyi donusturmek icin kullanilir.
names.stream().map(name -> name.toUpperCase()).forEach(System.out::println);

Ciktimiz:

JOHN
JACK
KATE
SAWYER
HURLEY
JOHN

  • 1 ile 5 arasindaki sayilarin karesini hesaplayalim:
IntStream.rangeClosed(1, 5).map(i -> i* i).forEach(System.out::println);
Ciktimiz:
1
4
9
16
25

REDUCE

Reduce, ise 2 parametre alir. Bir baslangic degeri, digeri ise onceki sonuc. Yani bir onceki islemin sonucu digerine input olarak verilir.

  • 1'den 5'e kadar olan sayilarin toplamini bulalim. bir onceki sonuc digerine input olacagi icin reduce'u kullanabiliriz.
int result = IntStream.rangeClosed(1, 5).reduce(0, (prev, next) -> prev + next);

Burada result 15 olarak hesaplanir.

MAP VE REDUCE BIRLIKTE KULLANIMI

Simdi de map ve reduce birlikte kullanimini gorelim. Person adinda bir classimiz olsun ve tum personlarimizin yaslarinin ortalamasini hesaplamak isteyelim.

public class Person {
   private String name;
   private Integer age;
   public Person(String name, Integer age) {
	super();
	this.name = name;
	this.age = age;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public Integer getAge() {
	return age;
}
public void setAge(Integer age) {
	this.age = age;
}    
}


Ortalama icin de :

Person p1 = new Person("John", 12);
Person p2 = new Person("Jack", 20);
Person p3 = new Person("Kate", 30);
Person p4 = new Person("Sawyer", 51);
Person p5 = new Person("Hurley", 60);
List personList = Arrays.asList(p1, p2, p3, p4, p5);
double ortalama = personList.stream().map(p -> p.getAge()).map(Double::valueOf).reduce(0, (a, b) -> (a+b)/2);

Eger yas degeri null olan varsa ortalamaya dahil etmemek icin de asagidaki gibi yapabiliriz.

personList.stream().filter(Objects:nonNull).map(p -> p.getAge()).map(Double::valueOf).reduce(0, (a,b) -> (a+b)/2;)

  • Kitaplari sayfalarina gore artan siraya dizelim:
Book book1 = new Book("Clean Code", "Robert Cecil Martin", 300);
Book book2 = new Book("Test Driven Development", "Kent Beck", 450);
Book book3 = new Book("Refactoring", "Martin Fowler", 200);
List<Book> bookList = Arrays.asList(book1, book2, book3);
bookList.stream().sorted(Comparator.comparingInt(Book::getPage)).collect(Collectors.toList());


Hiç yorum yok:

Yorum Gönder