java
Stream adalah lapisan abstrak baru yang diperkenalkan di Java 8. Dengan menggunakan stream, Anda dapat memproses data dengan cara deklaratif yang mirip dengan pernyataan SQL. Sebagai contoh, perhatikan pernyataan SQL berikut.
SELECT max(salary), employee_id, employee_name FROM Employee
Ekspresi SQL di atas secara otomatis mengembalikan detail karyawan bergaji maksimum, tanpa melakukan perhitungan apa pun di pihak pengembang. Menggunakan kerangka koleksi di Jawa, pengembang harus menggunakan loop dan melakukan pemeriksaan berulang. Kekhawatiran lain adalah efisiensi; karena prosesor multi-core tersedia dengan mudah, pengembang Java harus menulis pemrosesan kode paralel yang bisa sangat rawan kesalahan.
Untuk mengatasi masalah tersebut, Java 8 memperkenalkan konsep aliran yang memungkinkan pengembang memproses data secara deklaratif dan memanfaatkan arsitektur multicore tanpa perlu menulis kode khusus untuk itu.
Stream mewakili urutan objek dari sumber, yang mendukung operasi agregat. Berikut adalah ciri-ciri Aliran −
Urutan elemen Aliran menyediakan satu set elemen tipe tertentu secara berurutan. Aliran mendapatkan/menghitung elemen sesuai permintaan. Itu tidak pernah menyimpan elemen.
Sumber Stream mengambil Koleksi, Array, atau sumber daya I/O sebagai sumber input.
Operasi agregat Aliran mendukung operasi agregat seperti filter, peta, batas, kurangi, temukan, cocokkan, dan sebagainya.
Pemipaan Sebagian besar operasi aliran mengembalikan aliran itu sendiri sehingga hasilnya dapat disalurkan. Operasi ini disebut operasi antara dan fungsinya adalah untuk mengambil input, memprosesnya, dan mengembalikan output ke target. metode collect() adalah operasi terminal yang biasanya ada di akhir operasi pemipaan untuk menandai akhir aliran.
Iterasi otomatis Operasi aliran melakukan iterasi secara internal atas elemen sumber yang disediakan, berbeda dengan Koleksi yang memerlukan iterasi eksplisit.
Dengan Java 8, antarmuka Collection memiliki dua metode untuk menghasilkan Stream.
aliran() Mengembalikan aliran berurutan dengan mempertimbangkan koleksi sebagai sumbernya.
parallelStream() Mengembalikan Aliran paralel dengan mempertimbangkan koleksi sebagai sumbernya.
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
Stream telah menyediakan metode baru 'forEach' untuk mengulangi setiap elemen aliran. Segmen kode berikut menunjukkan cara mencetak 10 angka acak menggunakan forEach.
Random random = new Random(); random.ints().limit(10).forEach(System.out::println);
Metode 'peta' digunakan untuk memetakan setiap elemen ke hasil yang sesuai. Segmen kode berikut mencetak kotak angka unik menggunakan peta.
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); //get list of unique squares List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
Metode 'filter' digunakan untuk menghilangkan elemen berdasarkan kriteria. Segmen kode berikut mencetak jumlah string kosong menggunakan filter.
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); //get count of empty string int count = strings.stream().filter(string -> string.isEmpty()).count();
Metode 'batas' digunakan untuk mengurangi ukuran aliran. Segmen kode berikut menunjukkan cara mencetak 10 angka acak menggunakan batas.
Random random = new Random(); random.ints().limit(10).forEach(System.out::println);
Metode 'diurutkan' digunakan untuk mengurutkan aliran. Segmen kode berikut menunjukkan cara mencetak 10 angka acak dalam urutan yang diurutkan.
Random random = new Random(); random.ints().limit(10).sorted().forEach(System.out::println);
parallelStream adalah alternatif aliran untuk pemrosesan paralel. Lihatlah segmen kode berikut yang mencetak hitungan string kosong menggunakan parallelStream.
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); //get count of empty string long count = strings.parallelStream().filter(string -> string.isEmpty()).count();
Sangat mudah untuk beralih antara aliran sekuensial dan paralel.
Kolektor digunakan untuk menggabungkan hasil pemrosesan pada elemen aliran. Kolektor dapat digunakan untuk mengembalikan daftar atau string.
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList()); System.out.println("Filtered List: " + filtered); String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", ")); System.out.println("Merged String: " + mergedString);
Dengan Java 8, pengumpul statistik diperkenalkan untuk menghitung semua statistik saat pemrosesan aliran sedang dilakukan.
List numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics(); System.out.println("Highest number in List : " + stats.getMax()); System.out.println("Lowest number in List : " + stats.getMin()); System.out.println("Sum of all numbers : " + stats.getSum()); System.out.println("Average of all numbers : " + stats.getAverage());
Buat program Java berikut menggunakan editor pilihan Anda, misalnya, C:\> JAVA.
import java.util.ArrayList; import java.util.Arrays; import java.util.IntSummaryStatistics; import java.util.List; import java.util.Random; import java.util.stream.Collectors; import java.util.Map; public class Java8Tester { public static void main(String args[]) { System.out.println("Using Java 7: "); // Count empty strings List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); System.out.println("List: " +strings); long count = getCountEmptyStringUsingJava7(strings); System.out.println("Empty Strings: " + count); count = getCountLength3UsingJava7(strings); System.out.println("Strings of length 3: " + count); //Eliminate empty string List<String> filtered = deleteEmptyStringsUsingJava7(strings); System.out.println("Filtered List: " + filtered); //Eliminate empty string and join using comma. String mergedString = getMergedStringUsingJava7(strings,", "); System.out.println("Merged String: " + mergedString); List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); //get list of square of distinct numbers List<Integer> squaresList = getSquares(numbers); System.out.println("Squares List: " + squaresList); List<Integer> integers = Arrays.asList(1,2,13,4,15,6,17,8,19); System.out.println("List: " +integers); System.out.println("Highest number in List : " + getMax(integers)); System.out.println("Lowest number in List : " + getMin(integers)); System.out.println("Sum of all numbers : " + getSum(integers)); System.out.println("Average of all numbers : " + getAverage(integers)); System.out.println("Random Numbers: "); //print ten random numbers Random random = new Random(); for(int i = 0; i < 10; i++) { System.out.println(random.nextInt()); } System.out.println("Using Java 8: "); System.out.println("List: " +strings); count = strings.stream().filter(string->string.isEmpty()).count(); System.out.println("Empty Strings: " + count); count = strings.stream().filter(string -> string.length() == 3).count(); System.out.println("Strings of length 3: " + count); filtered = strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.toList()); System.out.println("Filtered List: " + filtered); mergedString = strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.joining(", ")); System.out.println("Merged String: " + mergedString); squaresList = numbers.stream().map( i ->i*i).distinct().collect(Collectors.toList()); System.out.println("Squares List: " + squaresList); System.out.println("List: " +integers); IntSummaryStatistics stats = integers.stream().mapToInt((x) ->x).summaryStatistics(); System.out.println("Highest number in List : " + stats.getMax()); System.out.println("Lowest number in List : " + stats.getMin()); System.out.println("Sum of all numbers : " + stats.getSum()); System.out.println("Average of all numbers : " + stats.getAverage()); System.out.println("Random Numbers: "); random.ints().limit(10).sorted().forEach(System.out::println); //parallel processing count = strings.parallelStream().filter(string -> string.isEmpty()).count(); System.out.println("Empty Strings: " + count); } private static int getCountEmptyStringUsingJava7(List<String> strings) { int count = 0; for(String string: strings) { if(string.isEmpty()) { count++; } } return count; } private static int getCountLength3UsingJava7(List<String> strings) { int count = 0; for(String string: strings) { if(string.length() == 3) { count++; } } return count; } private static List<String> deleteEmptyStringsUsingJava7(List<String> strings) { List<String> filteredList = new ArrayList<String>(); for(String string: strings) { if(!string.isEmpty()) { filteredList.add(string); } } return filteredList; } private static String getMergedStringUsingJava7(List<String> strings, String separator) { StringBuilder stringBuilder = new StringBuilder(); for(String string: strings) { if(!string.isEmpty()) { stringBuilder.append(string); stringBuilder.append(separator); } } String mergedString = stringBuilder.toString(); return mergedString.substring(0, mergedString.length()-2); } private static List<Integer> getSquares(List<Integer> numbers) { List<Integer> squaresList = new ArrayList<Integer>(); for(Integer number: numbers) { Integer square = new Integer(number.intValue() * number.intValue()); if(!squaresList.contains(square)) { squaresList.add(square); } } return squaresList; } private static int getMax(List<Integer> numbers) { int max = numbers.get(0); for(int i = 1;i < numbers.size();i++) { Integer number = numbers.get(i); if(number.intValue() > max) { max = number.intValue(); } } return max; } private static int getMin(List<Integer> numbers) { int min = numbers.get(0); for(int i= 1;i < numbers.size();i++) { Integer number = numbers.get(i); if(number.intValue() < min) { min = number.intValue(); } } return min; } private static int getSum(List numbers) { int sum = (int)(numbers.get(0)); for(int i = 1;i < numbers.size();i++) { sum += (int)numbers.get(i); } return sum; } private static int getAverage(List<Integer> numbers) { return getSum(numbers) / numbers.size(); } }
Kompilasi kelas menggunakan javac kompiler sebagai berikut
C:\JAVA>javac Java8Tester.java
Sekarang jalankan Java8Tester sebagai berikut
C:\JAVA>java Java8Tester
Seharusnya menghasilkan hasil berikut
Using Java 7: List: [abc, , bc, efg, abcd, , jkl] Empty Strings: 2 Strings of length 3: 3 Filtered List: [abc, bc, efg, abcd, jkl] Merged String: abc, bc, efg, abcd, jkl Squares List: [9, 4, 49, 25] List: [1, 2, 13, 4, 15, 6, 17, 8, 19] Highest number in List : 19 Lowest number in List : 1 Sum of all numbers : 85 Average of all numbers : 9 Random Numbers: -1279735475 903418352 -1133928044 -1571118911 628530462 18407523 -881538250 -718932165 270259229 421676854 Using Java 8: List: [abc, , bc, efg, abcd, , jkl] Empty Strings: 2 Strings of length 3: 3 Filtered List: [abc, bc, efg, abcd, jkl] Merged String: abc, bc, efg, abcd, jkl Squares List: [9, 4, 49, 25] List: [1, 2, 13, 4, 15, 6, 17, 8, 19] Highest number in List : 19 Lowest number in List : 1 Sum of all numbers : 85 Average of all numbers : 9.444444444444445 Random Numbers: -1009474951 -551240647 -2484714 181614550 933444268 1227850416 1579250773 1627454872 1683033687 1798939493 Empty Strings: 2
java
Antarmuka Koleksi Java Dalam tutorial ini, kita akan belajar tentang antarmuka Java Collection dan subinterface-nya. Collection antarmuka adalah antarmuka akar kerangka koleksi Java. Tidak ada implementasi langsung dari antarmuka ini. Namun, ini diimplementasikan melalui subinterfacenya seperti L
Daftar Java Dalam tutorial ini, kita akan belajar tentang antarmuka Daftar di Java dan metodenya. Dalam Java, List interface adalah kumpulan terurut yang memungkinkan kita untuk menyimpan dan mengakses elemen secara berurutan. Ini memperluas Collection antarmuka. Kelas yang Menerapkan Daftar Seja
Antarmuka Antrian Java Dalam tutorial ini, kita akan belajar tentang antarmuka Java Queue dan metodenya. Queue antarmuka kerangka koleksi Java menyediakan fungsionalitas struktur data antrian. Ini memperluas Collection antarmuka. Kelas yang Menerapkan Antrian Sejak Queue adalah antarmuka, kami t
Aliran I/O Java Dalam tutorial ini, kita akan belajar tentang aliran input/output Java dan jenisnya. Di Java, stream adalah urutan data yang dibaca dari sumber dan ditulis ke tujuan. Sebuah aliran masukan digunakan untuk membaca data dari sumbernya. Dan, aliran keluaran digunakan untuk menulis dat