1. Nglumpukake unsur

Pungkasan, kita wis tekan metode sing paling menarik ing Streamkelas, yaiku collect()metode. Digunakake kanggo pindhah saka stream menyang koleksi sing wis dikenal - List<T>, Set<T>, Map<T, R>lan liya-liyane.

Cara kasebut collect()njupuk collectorobyek khusus minangka argumen. Obyek iki maca kabeh data saka stream, ngowahi menyang jinis tartamtu saka koleksi, lan bali. Banjur metode ngumpulake dhewe ngasilake koleksi iki.

Kabeh iki ditindakake kanthi cara sing rada lunyu: collectorjinis obyek yaiku Collector<T, A, R>. Nalika sampeyan bisa ndeleng, wis telung jinis paramèter. Parameter jinis pungkasan ( R) biasane jinis kaya List<T>. Iki tegese compiler bisa nggunakake jinis iki kanggo nemtokake jinis bali bener kanggo collect()cara dhewe.

Muga-muga sampeyan ora bingung. Ing kasus apa wae, sampeyan ora perlu nggawe obyek Kolektor dhewe. Obyek siap digawe bali dening cara statis saka Collectorskelas bakal cukup.

Kelas kolektor

Kelas kasebut Collectorsduwe sawetara cara statis sing ngasilake obyek kolektor sing wis digawe - soko kanggo saben kesempatan. Ing kene kita bakal nimbang sing paling penting.

toList()
Objek sing ngowahi stream dadi dhaptar ( List<T>)
toSet()
Objek sing ngowahi stream dadi set ( Set<T>)
toMap()
Objek sing ngowahi stream menyang peta ( Map<K, V>)
joining()
Concatenates unsur stream menyang senar siji
mapping()
Ngonversi unsur string dadi aMap<K, V>
groupingBy()
Klompok unsur lan baliMap<K, V>

2. Ngonversi stream menyang dhaptar

Ing ngisor iki minangka conto khas nggarap stream lan ngowahi asil dadi dhaptar

ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "Hello", "how's", "life?");

List<String> result = list.stream()
   .filter( s -> Character.isUpperCase(s.charAt(0)) )
   .collect( Collectors.toList() );

Kita entuk stream saka koleksi. Banjur kita entuk stream anyar kanthi nahan senar sing karakter pisanane yaiku huruf gedhe. Banjur kabeh data saka aliran kasebut diklumpukake dadi koleksi, sing banjur dibalekake.



3. Ngonversi stream menyang pesawat

Ing ngisor iki minangka conto khas nggarap stream lan ngowahi asil dadi set

ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "Hello", "how's", "life?");

Set<String> result = list.stream()
   .filter( s -> Character.isUpperCase(s.charAt(0)) )
   .collect( Collectors.toSet() );

Kabeh iku banget padha kode kanggo ngowahi stream menyang List, mung kita nggunakake obyek Penagih beda, kang bali dening toSet()cara.



4. Ngonversi stream menyang peta

Nanging ngowahi stream menyang peta rada angel. Saben entri ing Peta kasusun saka rong unsur: tombol lan nilai. We kudu tokoh metu carane kita bakal nemtokake tombol lan nilai kanggo saben unsur ing stream.

Tuladha:

ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "a=2", "b=3", "c=4", "d==3");

Map<String, String> result = list.stream()
   .map( e -> e.split("=") )
   .filter( e -> e.length == 2 )
   .collect( Collectors.toMap(e -> e[0], e -> e[1]) );

Ayo padha ndeleng apa sing kedadeyan ing kene.

Ing baris pisanan, kita digunakake map(...)kanggo ngowahi saben string menyang Uploaded saka strings. Nggunakake metode pamisah, kita dibagi saben senar dadi rong bagean.

Ing baris kapindho, kita pindhah menyang filter()cara mung array sing ngemot persis rong unsur. Senar kasebut d==3dipérang dadi telung unsur, sing ora cocog karo panyaring.

Lan pungkasane, ing baris pungkasan, kita ngowahi stream dadi Map<String, String>. Loro fungsi diterusake menyang toMap()metode kasebut. Kanggo saben unsur stream, fungsi pisanan kudu ngasilake tombol , lan nomer loro ngasilake nilai .

Unsur pisanan saben array ("a", "b", "c") bakal dadi kunci kita, lan unsur kapindho saben array ("2", "3", "4") bakal dadi nilai kita.



5. Ngonversi stream menyang senar

Objek kolektor liyane sing menarik bali dening Collectors.joining(). Ngonversi kabeh unsur stream menyang Stringlan concatenates menyang senar siji. Tuladha

ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "a=2", "b=3", "c=4", "d==3");
String result = list.stream().collect( Collectors.joining(", ") );