1. Inovasi ing Jawa 8: Pemrograman fungsional

Kanthi rilis Java 8, basa kasebut entuk dhukungan sing kuat kanggo pemrograman fungsional . Sampeyan bisa uga ujar manawa entuk dhukungan sing ditunggu-tunggu kanggo program fungsional. Coding dadi luwih cepet, sanajan kode luwih angel diwaca 🙂

Sadurunge sinau pemrograman fungsional ing Jawa, disaranake sampeyan ngerti telung perkara kanthi apik:

  1. OOP, warisan lan antarmuka ( Tingkat 1-2 ing quest Java Core ).
  2. Implementasi metode standar ing antarmuka .
  3. Kelas njero lan anonim .

Kabar apik yaiku sampeyan ora kudu ngerti kabeh iki kanggo nggunakake akeh fitur pemrograman fungsional ing Jawa. Kabar ala iku bakal angel kanggo ngerti persis carane kabeh wis diatur lan carane kabeh bisa tanpa ngerti bab kelas batin anonim.

Ing wulangan mbesuk, kita bakal fokus ing carane gampang lan prasaja nggunakake fitur program fungsi Jawa, tanpa pangerten jero babagan cara kerjane.

Perlu sawetara wulan kanggo ngerti kabeh nuansa pemrograman fungsional ing Jawa. Sampeyan bisa sinau maca kode kasebut sajrone sawetara jam. Dadi kita saranake miwiti cilik. Sanajan nganggo aliran I/O.


2. I / O lepen: stream pipelines

Apa sampeyan kelingan yen biyen sampeyan sinau babagan aliran I/O: InputStream, OutputStream, Reader, Writerlsp?

Ana kelas stream sing maca data saka sumber data , kayata FileInputSteam, lan ana aliran data penengah sing maca data saka aliran liyane, kayata InputStreamReaderlan BufferedReader.

Aliran kasebut bisa diatur dadi pipa pangolahan data. Contone, kaya iki:

FileInputStream input = new FileInputStream("c:\\readme.txt");
InputStreamReader reader = new InputStreamReader(input);
BufferedReader buff = new BufferedReader(reader);

String text = buff.readLine();

Penting kanggo dicathet yen ing sawetara baris kode pisanan, kita mung nggawe rantai Streamobyek. Data kasebut durung ngliwati saluran pipa.

Nanging sanalika kita nelpon buff.readLine()cara, ing ngisor iki bakal kelakon:

  1. Obyek BufferedReadernelpon read()metode ing InputStreamReaderobyek
  2. Obyek InputStreamReadernelpon read()metode ing FileInputStreamobyek
  3. Obyek FileInputStreamwiwit maca data saka file

Ing tembung liyane, ora ana gerakan data ing sadawane saluran pipa nganti kita miwiti nelpon cara kaya read()utawa readLine(). Konstruksi pipa stream mung ora nyopir data. Aliran kasebut ora nyimpen data. Dheweke mung maca saka wong liya.

Koleksi lan aliran

Miwiti karo Java 8, dadi bisa entuk stream kanggo maca data saka koleksi (lan ora mung saka wong-wong mau). Nanging iki dudu perkara sing paling menarik. Sejatine bisa gampang lan mung nggawe rantai kompleks aliran data. Lan kanthi mangkono, kode sing sadurunge njupuk 5-10 baris saiki bisa ditulis ing 1-2 baris.

Conto nemokake string paling dawa ing dhaptar string:

Nemokake string paling dawa
ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "Hello", "how's", "life?");
String max = list.stream().max((s1, s2)-> s1.length()-s2.length()).get();
ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "Hello", "how's", "life?");
Stream<String> stream = list.stream();
Optional<String> optional = stream.max((s1, s2)-> s1.length()-s2.length());
String max = optional.get();

3. Streamantarmuka

Dhukungan lengkap Java 8 kanggo stream dileksanakake nggunakake antarmuka Stream<T>, ing endi Tparameter jinis sing nuduhake jinis data sing diterusake ing aliran kasebut. Ing tembung liyane, stream temenan independen saka jinis data liwat.

Kanggo njupuk obyek stream saka koleksi , mung nelpon stream()cara. Kode katon kira-kira kaya iki:

Stream<Type> name = collection.stream();
Njupuk stream saka koleksi

Ing kasus iki, koleksi bakal dianggep minangka sumber data stream, lan obyek Stream<Type>bakal dadi piranti kanggo njupuk data saka kumpulan ing wangun stream data.

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

Miturut cara, sampeyan bisa entuk stream ora mung saka koleksi, nanging uga saka array . Kanggo nindakake iki, sampeyan kudu nggunakake cara. Tuladhane:Arrays.stream()

Stream<Type> name = Arrays.stream(array);
Njupuk stream saka array

Ing kasus iki, array bakal dianggep minangka sumber data kanggo stream sing diarani name.

Integer[] array = {1, 2, 3};
Stream<Integer> stream = Arrays.stream(array);

Ora ana data sing dipindhah nalika Stream<Type>obyek digawe. Kita mung entuk obyek stream kanggo miwiti mbangun pipa stream.