Java haladó szintű lehetőségei Flashcards

1
Q

Miért problémás hozzáadni új metódust egy interfészhez és mi ennek a megoldása?

A

Az új metódust minden olyan osztályban implementálni kell ahol az interfész használva van.
Megoldás: Úgy teszik lehetővé az alap és statikus interfészek ezt, hogy automatikusan rendelkezésre állnak minden implementációban. Ezek nem igényelnek módosítást vagy újrafordítást. Ezt bináris kompatibilitásnak nevezik.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Jellemezd a nem absztrakt interfész metódusokat!

A

Egy default, static vagy private módosítóval és törzzsel ellátott metódus.
Implicit módon mind absztrakt , mely nem rendelkezik default, static vagy private módosítóval.
Az abstract, default és static kölcsönösen kizárják egymást.
A private és mellette vagy abstract vagy default van is hiba.
De lehet egyszerre private és static.
Alapértelmezésben egy metódus egy interfészben default módosítóval deklarált példánymetódus.
A metódustörzs pedig a metódus implementációja, ahol nincs felülírva.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Jellemezd az alapértelmezett metódusokat!

A

Ha egy interfész kiterjeszt egy alapértelmezett metódust tartalmazó interfészt, akkor:
ha nem említi a metódust, akkor örökli
ha újrdafeiniálja, akkor felülírja
ha absztrakként deklarálja, akkor felülírásra kényszeríti az implementáló osztályokat.

Ha egy osztály implementál alapértelmezett metódust tartalmazó interfészt, akkor:
ha nem említi a metódust, akkor örökli
ha újrdafeiniálja, akkor felülírja
ha absztrakként deklarálja, akkor felülírásra kényszeríti az implementáló osztályokat.(ha az osztály absztrakt)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Jellemezd a statikus interfész metódusokat!

A

Static módosítóval deklarált metódus. A statikus metódusokat nem öröklik az alinterfészek. Hívásuk egy bizonyos példányra való hivatkozás nélkül történik, osztályok statikus metódusaihoz hasonlóan.
Hiba ha statikus metódus törzsében this vagy super van.
Az interfészhez kötődő segédmetódusok hozzáadását teszik lehetőve.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Jellemezd a privát interfész metódusokat!

A

Private módosítóval deklarált metódus. Kombinálható staticcal. Nem öröklik az alinterfészek. Az alap metódusok és statikus metódusok közötti kódmegosztásra szolgálnak.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Jellemezd a java.util.Optionalt!

A

Egy konténer objektum, melyben van egy nem null vagy nincs.
Olyan metódusok visszatérési típusaként használják ahol a nincs eredményt kell ábrázolni és a null hibát okoz.
Optional változó nem lehet null, Optional példányra mutat.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Sorold fel a java.util.Optional metódusait!

A

Statikus metódusok:
Optional<T> empty() - üres optional példányt ad vissza
Optional<T> of(T value) - visszaad Optional példányt nem null értékkel
Optional<T> ofNullable(T value) - visszaad Optional példányt nem null értékkel ha az nem null, különben üres</T></T></T>

Példánymetódusok:
boolean isPresent() - tartalmaz e értéket
T get() - ha van érték azt, ha nincs NoSuchElementException ad vissza
T orElse(T other) - ha van érték azt, ha nem akkor othert

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Jellemezd a funkcionális interfészeket!

A

Olyan interfész, melynek csak egy absztrakt metódusa van. (SAM - Single Abstract Method). Metódusa az funkcionális metódus. Több statikus/privát metódusa is lehet.
FunctionalInterface annotáció jelzi, hogy funkcionális, de nem kötelező.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Jellemezd a lambda kifejezéseket!

A

Egy névtelen belső osztályt ábrázolnak, amely egy funkcionális interfészt implementál. A kiértékelése a névtelen belső osztály egy példányát hozza létre.
Szintaxis: (paraméterek) -> {törzs}
Névtelen függvényeket ábrázolnak.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Jellemezd a lambda kifejezések paramétereit!

A

Paramétereit () között megadott ,-vel elválaszott paraméterlista határozza meg.Ha nincs paraméter akkor a token és a törzs között csak () jelenik meg.
Ha csak egy paramétere van akkor elhagyható a ().
Minden paraméterének egy kikövetkeztetett vagy deklarált típusa van. Hiba ha van mindkettő.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Jellemezd a lambda kifejezések törzsét!

A

Lehet egy kifejezés vagy egy blokk. Hatáskör szempontjából változatlan. This és super jelentése is változatlan. Egy lokális változó akkor hivatkozható ha final vagy gyakorlatilag final (egyszer kap értéket, többet soha a lambda kifejezésben).
A lambda kifejezés kiértékelése nem eredményezi a törzs kiértékelését.
Hibát jelent ha lambda kifejezés értékadástól, hívástól vagy típuskényszerítéstől más környezetben fordul elő.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Jellemezd a metódus referenciákat!

A

Metódushívásra hivatkozunk tényleges hívás nélkül. Egyes esetekben osztálypéldány vagy tömb létrehozást is tudunk úgy kezelni, mintha azok metódushívások lennének.
Egy metódus referencia kifejezés kiértékelése egy funkcionális interfésztípus egy példányát hozza létre. A végrehajtás később történik.

Hibát okoz ha a metódus referencia kifejezés értékadástól, hívástól vagy típuskényszerítéstől eltérő bármely más helyzetben fordul elő.

Mikor több metódusnak ugyanaz a neve, vagy egy osztálynak több konstruktora van akkor a metódus referencia kifejezés által lesz kiválasztva.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Mik a streamek?

A

Elemek egy sorozata, melyen műveletek végezhetők.
java.util.stream.Stream<T> interfész ábrázol egy streamet.</T>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Miben térnek el a streamek a kollekcióktól?

A

Nincs mögöttük tárhely: nem tárol, hanem továbbít elemeket
Funkcionális természetűek: egy művelet eredményt hoz le, nem módosítja a stream forrását.
Nem feltétlenül korlátosak: nem véges méretűek, a rövidzár műveletek végtelen streamekent történő véges számításokat tesznek lehetővé.
Fogyaszthatók: elemei csupán egyszer kerülnek meglátogatásra a stream élete során

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Hogy lehet streameket létrehozni?

A

Kollekciókból: stream() és parallelStream() metódusokkal
Tömbökből: java.util.Arrays stream gyártó metódusával
Egyedi objektumokból: java.util.Stream. of(T t) és of(T values) metódusokkal és builder() metódus által visszaadott Stream.Builder objektummal

Java SE osztály által:
java.io.BufferedReader: a lines() és java.lang.String: a lines() metódus a sorok streamjét adja vissza

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Jellemezd a streameken történő műveleteket!

A

Több típusa van:
- köztes műveletek (intermediate operations) - új streamet adnak vissza
- terminális műveletek (terminal operations) - egy streamtől különböző eredményt hoznak létre vagy mellékhatást eredményeznek. - void vagy nem streammel térnek vissza

  • rövidzár műveletek (short-circuiting operation)
    köztes esetben- végtelen bemenetből is végest csinál pl. limit(), takeWhile()
    terminális esetben - végtelen bemenet esetén is véges időben leáll pl. anyMatch(), findFirst()

végtelen bemenet esetén szükséges de nem elégséges a rövidzár művelet

17
Q

Jellemezd a streamek köztes műveleteit!

A

Lehet:
állapotmentes műveletek (stateless operations) - nem őriznek a korábban látott elemekből állapotot amikor egy újat dolgoznak fel pl. filter(), map()
állapotörző műveletek (stateful operations) - felhasználnak korábban látott elemekből állapotot pl. distinct(). sorted()

18
Q

Jellemezd a streamek sorrendjét!

A

Lehet a streameknek meghatározott sorrendje (enctounter order), melyben az elemeket a műveletek számára szolgáltatják.
Egyes források rendezettek.
sorted() köztes művelet írhat elő új sorrendet, de pl. BaseStream.unordered() rendezetlenné teheti azt.
Egyes terminális művelet figyelmen kívül hagyja a sorrendet.

19
Q

Jellemezd a streamek viselkedési paraméterek kívánatos jellemzőit!

A

Mindig egy funkcionális interfész példányai és rendszerint lambda kifejezések vagy metódus referenciák.
Kívánatos jellemzők:
-interferencia-mentesség (non-interference) - a viselkedési paraméterek nem módosíthatják a stream adatforrását.
-állapotmentesség (statelessness) - egy lambda kifejezés állapotörző ha eredménye olyan állapottól függ, mely a stream végrehajtása során változhat. A stream eredménye rossz lehet, ha a viselkedési paraméterek állapotörzők.

Kerülendő a mellékhatás, forEach() és forEachOrdered() műveletek kivételével a viselkedési paraméterek mellékhatásai nem mindig kerül végrehajtásra

20
Q

Jellemezd a stream csővezetékeket!

A

A stream műveletek egy csővezetékbe láncolhátók. Egy forrásból áll, melyet nulla vagy több köztes művelet és egy terminális művelet követ.
A köztes művelet végrehajtása nem eredményez műveletvégzést, a terminális végrehajtása után kezdődik a csővezeték forrásának bejárása.
A terminális műveletek mohók, ez indítja a forrás bejárását, a csővezeték feldolgozása a visszatérés előtt fejeződik be.
Terminális során elhasználódik a csővezeték.
Állapotmentes köztes műveletek egy végig haladással is végrehajthatók egyszerre.

21
Q

Jellemezd a primitív streameket!

A

Műveleteik olyan specializált funkcionális interfészek példányait várják paraméterként mint pl. IntConsumer, IntFunciton, IntPredicate, IntSupplier. Az average() és sum() terminális műveletek is rendelkezésre állnak.

22
Q

Jellemezd a csővezeték végrehajtását!

A

Vertikálisan történik nem horizontálisan. Ez csökkenti az elemeken végrehajtandó műveletek számát. A művelet sorrend hatással van a teljesítményre.

23
Q

Jellemezd a redukciós műveleteket!

A

Egy terminális művelet, mely az inputból egyetlen összesítő eredményt képez. reduce(), collect(), sum(), max(), count() stb.
Tömörebb és absztraktabb kifejezési formát használnak így van lehetőség a párhuzamosításra.

24
Q

Jellemezd a reduce() redukciós stream műveletet!

A

Egy terminális művelet, mely egy elemre redukálja a sorozatot.
- Egységelem (identity): redukció kezdőértéke, alapértelmezett értéke
- Akkumulátor (accumulator): függvény, mely két paramétert kap, a redukció egy részleges eredményét és a következő elemet, melyekből új elemet állít elő.
- Egyesítő (combiner): kétparaméteres függvény, mely két részleges eredményt kap és azokat új részleges eredménnyé egyesíti

asszociatív, interferencia és állapotmentes függvény

Formái:
reduce(akkumulátor)
reduce(egységelem, akkumulátor)
reduce(egységelem, akkumulátor, egyesítő)

25
Q

Jellemezd a collect() redukciós stream műveletet!

A

Egy módosítható eredmény konténerbe gyűjti az input elemeket.
- ellátó (supplier): konténert létrehozó függvény
- akkumulátor (accumulator): konténerbe egy elemet helyező függvény
- egyesítő (combiner): két konténert fésül össze, másodikat elsőbe rakja
- befejező (finisher): végső transzformációt végez
- gyűjtő (collector): egy ellátó, akkumulátor, egyesítő és egy opcionális befejező alkotja

formái:
collect(ellátó, akkumulátor, egyesítő):
collect(gyűjtő):