Aktarım API şu tarihte tanıtıldı: Java 8 nesnelerin koleksiyonlarını işlemek için kullanılır. İthalat yoluyla kullanılabilir. java.util.stream paket. Bu bölümde şunları tartışacağız: Stream.flatMap() Akış API'sinin yöntemi. Ayrıca şunları tartışacağız Java 8'deki Stream.flatMap() ve Stream.map() yöntemi arasındaki temel farklar.
java'yı nasıl yükseltebilirim
Konuya geçmeden önce öncelikle konuyu anlayalım. Stream.map() yöntem. Çünkü düz harita() yöntem şuna dayanmaktadır: harita() yöntem.
Java Stream.map() Yöntemi
Stream.map() yöntemi, eşleyici işlevini kullanarak bir ara işlem gerçekleştirir. Her öğe için yeni bir akış üretir. Sonucu sağlamak için tüm akışları tek bir akışa dönüştürür. bu nedenle akışın her öğesi yeni bir akışa dönüştürülür.
Sözdizimi:
Stream map(Function mapper)
R: Yeni akışın öğe türünü temsil eden bir tür parametresidir.
haritacı: Her öğeye uygulanacak, müdahale etmeyen, durum bilgisi olmayan bir işlev olan bir parametredir.
Map() Yöntemi Örneği
List citylist = Arrays.asList('delhi', 'mumbai', 'hyderabad', 'ahmedabad', 'indore', 'patna'). stream(). map(String::toUpperCase).collect(Collectors.toList());
Bir harita için yukarıdaki ifadeyi göz önünde bulundurun aktarım . Map()'ı kullanarak sonuçta ortaya çıkan bir akış oluşturur. Her yinelemede, map(), eşleyici işlevini çalıştırarak sonuçla birlikte ayrı bir akış oluşturur. Sonunda, map() tüm akışları tek bir akışa dönüştürür.
HaritaÖrneği.java
import java.util.*; public class MapExample { public static void main(String args[]) { System.out.println('Stream After applying the map() function: '); //creats a list of integers List list = Arrays.asList(12, 45, 67, 19, 87, 2, 9); //creating a new stream of the elements an prints the same using the foreach loop list.stream().map(number -> number * 2).forEach(System.out::println); } }
Çıktı:
Stream After applying the map() function: 24 90 134 38 174 4 18
Java Stream.flatMap() Yöntemi
İçinde Java 8 Akışlar, flatMap() yöntemi, işlemi bir eşleyici işlevi olarak uygular ve öğe değerlerinin bir akışını sağlar. Bu, her öğenin her yinelemesinde, map() yönteminin ayrı bir yeni akış oluşturduğu anlamına gelir. Düzleştirme mekanizmasını kullanarak tüm akışları tek bir sonuç akışında birleştirir. Kısaca Stream of Stream'i değerler listesine dönüştürmek için kullanılır.
Sözdizimi:
Stream flatMap(Function<? super T,? extends Stream> mapper)
Yöntem bir işlevi argüman olarak alır. T'yi parametre olarak kabul eder ve bir R akışını döndürür.
R: Yeni akışın öğe türünü temsil eden bir tür parametresidir.
haritacı: Her öğeye uygulanacak, müdahale etmeyen, durum bilgisi olmayan bir işlev olan bir parametredir. Yeni değerler akışı üretir.
Kısacası, FlatMap() yönteminin dönüştürmede yardımcı olduğunu söyleyebiliriz. Aktarım
flatMap() = Flattening (flat)+ mapping (map)
Düzleştirmenin anlamını anlayalım.
Düzleştirme nedir?
Düzleştirme çeşitli liste listelerini dönüştürme ve tüm listelerdeki öğeleri içeren tek bir liste oluşturmak için tüm bu listeleri birleştirme işlemidir.
android sürüm geçmişi
Düzleştirme Örneği
Aşağıdaki liste listelerini göz önünde bulundurun:
Düzleştirmeden Önce: [[1, 2, 3, 4], [7, 8, 9, 0], [5, 6], [12, 18, 19, 20, 17], [22]]
rohit shetty aktör
Düzleştirmeden Sonra: [1, 2, 3, 4, 7, 8, 9, 0, 5, 6, 12, 18, 19, 20, 17, 22]
FlatMap() Yöntemi Örneği
List country = Stream.of(Arrays.asList('Colombia', 'Finland', 'Greece', 'Iceland', 'Liberia', 'Mali', 'Mauritius'), Arrays.asList('Peru', 'Serbia', 'Singapore', 'Turkey', 'Uzbekistan', 'Yemen', 'Zimbabwe', 'Greece', 'Iceland')).flatMap(List::stream) .collect(Collectors.toList());
List::stream eşleyici işleviyle bir akışta flatMap() yöntemini kullanabiliriz. Akış terminali işlemini yürütürken, flatMap()'in her öğesi ayrı bir akış sağlar. Son aşamada, flatMap() yöntemi tüm akışları yeni bir akışa dönüştürür. Yukarıdaki akışta yinelenen değerler içermediğini gözlemliyoruz.
Bir Java programı oluşturalım ve flatMap() yöntemini kullanalım.
FlatMapExample.java
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class FlatmapExample { public static void main(String args[]) { //creating ArrayList List productlist1 = Arrays.asList('Printer', 'Mouse', 'Keyboard', 'Motherboard'); List productlist2 = Arrays.asList('Scanner', 'Projector', 'Light Pen'); List productlist3 = Arrays.asList('Pen Drive', 'Charger', 'WIFI Adapter', 'Cooling Fan'); List productlist4 = Arrays.asList('CPU Cabinet', 'WebCam', 'USB Light', 'Microphone', 'Power cable'); List<list> allproducts = new ArrayList<list>(); //adding elements to the list allproducts.add(productlist1); allproducts.add(productlist2); allproducts.add(productlist3); allproducts.add(productlist4); //creating a list of all products List listOfAllProducts = new ArrayList(); //for each loop iterates over the list for(List pro : allproducts) { for(String product : pro) { //adds all products to the list listOfAllProducts.add(product); } } System.out.println('List Before Applying mapping and Flattening: '); //prints stream before applying the flatMap() method System.out.println(listOfAllProducts); System.out.println(); //creats a stream of elemnts using flatMap() List flatMapList = allproducts .stream().flatMap(pList -> pList.stream()).collect(Collectors.toList()); System.out.println('List After Applying Mapping and Flattening Operation: '); //prints the new stream that we get after applying mapping and flattening System.out.println(flatMapList); } } </list></list>
Çıktı:
List Before Applying mapping and Flattening: [Printer, Mouse, Keyboard, Motherboard, Scanner, Projector, Lighten, Pen Drive, Charger, WIFI Adapter, Cooling Fan, CPU Cabinet, WebCam, USB Light, Microphone] List After Applying Mapping and Flattening Operation: [Printer, Mouse, Keyboard, Motherboard, Scanner, Projector, Light Pen, Pen Drive, Charger, WIFI Adapter, Cooling Fan, CPU Cabinet, WebCam, USB Light, Microphone]
Artık Stream sınıfının her iki metodunu da anladık. Çünkü aralarındaki temel farkları kolayca belirtebiliriz.
Stream.flatMap() Vs. Stream.map()
Aşağıdaki tabloda Stream.flatMap() ve Stream.map() arasındaki temel farklar açıklanmaktadır.
Stream.flatMap() | Stream.map() |
---|---|
Akışın değerleri akışını işler. | Değer akışını işler. |
Düzleştirmenin yanı sıra haritalama da yapar. | Yalnızca haritalama gerçekleştirir. |
Akıştan verileri dönüştürür | Verileri Akıştan Akışa dönüştürür. |
Bire Çok eşlemeyi kullanır. | Bire Bir haritalamayı kullanır. |
Eşleyici işlevi, her giriş değeri için birden fazla değer (değer akışı) üretir. | Eşleyici işlevi her giriş değeri için tek değerler üretir. |
Eşleştirici işlevi her giriş değeri için birden çok değer ürettiğinde, flatMap() yöntemini kullanın. | Eşleştirici işlevi her giriş değeri için tek değerler üretirken, harita() yöntemini kullanın. |