Giriş
Java 9 ile geliyor. Yeni bir Collector döner. Yani aynı Collectors.toList() gibidir.
Java 9 ile geliyor. Yeni bir Collector döner. Yani aynı Collectors.toList() gibidir.
Bu yeni Collectors metodlarının amacı bir sürü geçici nesne oluşmasının önüne geçmek. Böylece daha verimli kod yazılması mümkün.
flatMapping metodu - Stream + Collector
Örnek
Şöyle yaparız. Sonuç olarak [1, 2, 3, 4] alırız
List<List<Integer>> list2d = List.of(List.of(1, 2), List.of(3, 4));List<Integer> lst1 = list_2d.stream().collect(Collectors.flatMapping (List::stream, Collectors.toList()));
Bu kod aslında şununla işlev olarak aynı. Anca Stream.flatMap() bir sürü geçici stream tipinden nesne yararıyor. Bu yüzden verimsiz.
List<List<Integer>> list_2d = List.of(List.of(1, 2), List.of(3, 4));
List<Integer> lst1 = list_2d
.stream()
.flatMap(arr -> arr.stream())
.collect(Collectors.toList());
printAll(lst1); // [1, 2, 3, 4]
Elimizde şöyle bir kod olsun.
public class WorkExperience {
private int year;
private List<Skills> skill;
...
}
Bu sınıfın listesi olsun. Aynı yıla ait tüm Skill'leri gruplamak isteyelim.List<WorkExperience> workExperienceList = ...;
Her yıla göre Skill nesnelerini gruplamak için şöyle yaparız.Map<Integer, Set<Skills>> map = workExperienceList.stream()
.collect(Collectors.groupingBy(
WorkExperience::getYear,
Collectors.flatMapping(workexp -> workexp.getSkill().stream(),
Collectors.toSet())));
Örnek - groupingBy() Elimizde şöyle bir kod olsun. Aynı kişiye ait tüm adresleri gruplamak isteyelim.
class Person {
String name;
int age;
List<Address> address;
}
class Address {
String street;
String city;
String country;
}
Şöyle yaparız.Map<Person, List<Address>> resultSet = findPerson.stream()
.collect(
Collectors.groupingBy(
Function.identity(),
Collectors.flatMapping(
p -> p.getAddress().stream(),
Collectors.toList()
)
)
)
;
Hiç yorum yok:
Yorum Gönder