1. Innovasjoner i Java 8: Funksjonell programmering
Med utgivelsen av Java 8 fikk språket kraftig støtte for funksjonell programmering . Du kan til og med si at den fikk etterlengtet støtte for funksjonell programmering. Koding ble raskere, selv om koden var vanskeligere å lese 🙂
Før du lærer funksjonell programmering i Java, anbefaler vi at du forstår tre ting godt:
- OOP, arv og grensesnitt ( nivå 1-2 i Java Core-oppdraget ).
- Standard metodeimplementeringer i et grensesnitt .
- Indre og anonyme klasser .
Den gode nyheten er at du ikke trenger å kunne alt dette for å bruke mange av funksjonene til funksjonell programmering i Java. Den dårlige nyheten er at det vil være vanskelig å forstå nøyaktig hvordan alt er ordnet og hvordan alt fungerer uten å vite om anonyme indre klasser.
I de kommende leksjonene vil vi fokusere på hvor enkelt og enkelt det er å bruke Javas funksjonelle programmeringsfunksjoner, uten en dyp forståelse av hvordan det fungerer.
Det tar måneder å forstå alle nyansene ved funksjonell programmering i Java. Du kan lære å lese slik kode i løpet av noen timer. Så vi foreslår å starte i det små. Selv om det er med I/O-strømmer.
2. I/O-strømmer: strømrørledninger
Husker du at du en gang i tiden lærte om I/O-strømmer: InputStream
, OutputStream
, Reader
, Writer
osv.?
Det var strømklasser som leste data fra datakilder , for eksempel FileInputSteam
, og det var mellomliggende datastrømmer som leste data fra andre strømmer, for eksempel InputStreamReader
og BufferedReader
.
Disse strømmene kan organiseres i databehandlingsrørledninger. For eksempel slik:
FileInputStream input = new FileInputStream("c:\\readme.txt");
InputStreamReader reader = new InputStreamReader(input);
BufferedReader buff = new BufferedReader(reader);
String text = buff.readLine();
Det er viktig å merke seg at i de første kodelinjene konstruerer vi bare en kjede av Stream
objekter. Dataene har ikke gått gjennom rørledningen ennå.
Men så snart vi kaller buff.readLine()
metoden, vil følgende skje:
- Objektet
BufferedReader
kallerread()
metoden påInputStreamReader
objektet - Objektet
InputStreamReader
kallerread()
metoden påFileInputStream
objektet - Objektet
FileInputStream
begynner å lese data fra filen
Med andre ord er det ingen bevegelse av data langs strømledningen før vi begynner å kalle metoder som read()
eller readLine()
. Bare konstruksjonen av strømrørledningen driver ikke data gjennom den. Strømmene i seg selv lagrer ikke data. De leser bare fra andre.
Samlinger og strømmer
Fra og med Java 8 ble det mulig å få en strøm til å lese data fra samlinger (og ikke bare fra dem). Men dette er ikke det mest interessante. Det ble faktisk mulig å enkelt og enkelt konstruere komplekse kjeder av datastrømmer. Og ved å gjøre det kunne koden som tidligere tok 5-10 linjer nå skrives i 1-2 linjer.
Eksempel på å finne den lengste strengen i en liste over strenger:
Finne den lengste strengen |
---|
|
|
3. Stream
grensesnitt
Java 8s utvidede støtte for strømmer er implementert ved hjelp av Stream<T>
grensesnittet, der T
er en typeparameter som indikerer typen data som sendes i strømmen. En strøm er med andre ord helt uavhengig av hvilken type data den sender.
For å hente et strømobjekt fra en samling , ring bare stream()
metoden. Koden ser omtrent slik ut:
Stream<Type> name = collection.stream();
I dette tilfellet vil samlingen betraktes som strømmens datakilde, og objektet Stream<Type>
vil være et verktøy for å hente data fra samlingen i form av en datastrøm.
ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "Hello", "how's", "life?");
Stream<String> stream = list.stream();
Forresten, du kan få en strøm ikke bare fra samlinger, men også fra matriser . For å gjøre dette, må du bruke metoden. For eksempel:Arrays.stream()
Stream<Type> name = Arrays.stream(array);
I dette tilfellet vil arrayet bli betraktet som datakilden for strømmen kalt name
.
Integer[] array = {1, 2, 3};
Stream<Integer> stream = Arrays.stream(array);
Ingen data flyttes når Stream<Type>
objektet opprettes. Vi fikk rett og slett et bekkeobjekt for å begynne å bygge en bekkeledning.
GO TO FULL VERSION