This shows you the differences between two versions of the page.
poo-ca-cd:laboratoare:java-features [2024/01/10 09:13] andrei.vasiliu2211 [Map, Filter, Peek, Reduce] |
poo-ca-cd:laboratoare:java-features [2025/01/08 10:20] (current) dragos.dragan1403 [flatMap și groupingBy] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Laboratorul 11: Java features ===== | + | ===== Laboratorul 11: Streams. Java features ===== |
==== Obiective ==== | ==== Obiective ==== | ||
- | * înțelegerea conceptelor de expresii lambda și de streams | ||
* familiarizarea cu metode default și cu metode statice în interfețe | * familiarizarea cu metode default și cu metode statice în interfețe | ||
- | * utilizarea de structuri sintactice introduse începând cu Java 8 (var) | + | * înțelegerea conceptelor de expresii lambda |
+ | * utilizare streams :-) | ||
+ | |||
+ | <hidden> | ||
+ | * utilizarea de structuri sintactice introduse începând cu Java 8 (var) | ||
+ | </hidden> | ||
==== Metode statice și metode default în interfețe ==== | ==== Metode statice și metode default în interfețe ==== | ||
Începând cu Java 8, putem implementa metode în cadrul interfețelor, unde, în mod clasic, avem doar metode neimplementate (abstracte). Mai precis, noi putem să implementăm trei tipuri de metode: default (non-statice), statice, iar începând cu Java 9 și private. | Începând cu Java 8, putem implementa metode în cadrul interfețelor, unde, în mod clasic, avem doar metode neimplementate (abstracte). Mai precis, noi putem să implementăm trei tipuri de metode: default (non-statice), statice, iar începând cu Java 9 și private. | ||
Line 223: | Line 227: | ||
</code> | </code> | ||
- | Interfața [[https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/function/Function.html | Function<T, R>]] expune și metode care pot înlănșui alte operașii de tipul Function. | + | Interfața [[https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/function/Function.html | Function<T, R>]] expune și metode care pot înlănțui alte operații de tipul Function. |
* [[https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/function/Function.html#andThen(java.util.function.Function) | andThen(Function<T, R>)]] - functia data ca parametru este executata dupa cea la care este apelata metoda | * [[https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/function/Function.html#andThen(java.util.function.Function) | andThen(Function<T, R>)]] - functia data ca parametru este executata dupa cea la care este apelata metoda | ||
* [[https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/function/Function.html#compose(java.util.function.Function) | compose(Function<T, R>)]] - functia data ca parametru este executata inainte de cea la care este apelata metoda | * [[https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/function/Function.html#compose(java.util.function.Function) | compose(Function<T, R>)]] - functia data ca parametru este executata inainte de cea la care este apelata metoda | ||
Line 268: | Line 272: | ||
<code java> | <code java> | ||
IntStream.range(1, 4) | IntStream.range(1, 4) | ||
- | .forEach(System.out::println); | + | .forEach(System.out::println); // 1 2 3 |
</code> | </code> | ||
Line 324: | Line 328: | ||
String[] myNewArray = Arrays.stream((String[])myArray.toArray()) | String[] myNewArray = Arrays.stream((String[])myArray.toArray()) | ||
.filter(x -> x.length() > 4) | .filter(x -> x.length() > 4) | ||
- | .toArray(String[]::new); | + | .toArray(String[]::new); // "monkey", "elephant", "zebra" |
</code> | </code> | ||
Line 459: | Line 463: | ||
*/ | */ | ||
+ | <hidden> | ||
==== Limbajul Kotlin ==== | ==== Limbajul Kotlin ==== | ||
Kotlin reprezintă un limbaj de programare orientat pe obiecte, creat încât să fie interoperabil cu Java, mai precis Kotlin rulează în același mediu cu Java (în JVM), astfel noi putem să avem un proiect în care să avem clase scrise în Java și clase scrise în Kotlin, o practică care este întâlnită în proiecte din industrie (backend, Android). | Kotlin reprezintă un limbaj de programare orientat pe obiecte, creat încât să fie interoperabil cu Java, mai precis Kotlin rulează în același mediu cu Java (în JVM), astfel noi putem să avem un proiect în care să avem clase scrise în Java și clase scrise în Kotlin, o practică care este întâlnită în proiecte din industrie (backend, Android). | ||
Line 467: | Line 472: | ||
Un exemplu ce ilustrează interoperabilitatea dintre Java și Kotlin poate fi găsit [[https://github.com/oop-pub/oop-labs/tree/master/src/lab12/kotlin | aici]]. | Un exemplu ce ilustrează interoperabilitatea dintre Java și Kotlin poate fi găsit [[https://github.com/oop-pub/oop-labs/tree/master/src/lab12/kotlin | aici]]. | ||
+ | </hidden> | ||
==== Exerciții ==== | ==== Exerciții ==== | ||
- | Laboratorul trebuie rezolvat pe platforma LambdaChecker, fiind găsit [[https://beta.lambdachecker.io/contest/23|aici]] | + | Laboratorul trebuie rezolvat pe platforma Devmind, fiind găsit [[https://beta.lambdachecker.io/contest/23|aici]] |
Vi se dă scheletul pentru o aplicație ce simulează o situație mai mult sau mai puțin fictivă. Mai multe firme cooperează cu o bancă pentru a oferi salariul și beneficiile salariațiilor lor. Firmele au mai mulți salariați și mai multe proiecte în istoric. Este posibil ca unii salariați să fi schimbat firma la care lucrează, dar li se pastrează în istoricul personal proiectele la care au lucrat. Un salariat poate avea mai multe conturi bancare făcute prin firma la care lucrează. | Vi se dă scheletul pentru o aplicație ce simulează o situație mai mult sau mai puțin fictivă. Mai multe firme cooperează cu o bancă pentru a oferi salariul și beneficiile salariațiilor lor. Firmele au mai mulți salariați și mai multe proiecte în istoric. Este posibil ca unii salariați să fi schimbat firma la care lucrează, dar li se pastrează în istoricul personal proiectele la care au lucrat. Un salariat poate avea mai multe conturi bancare făcute prin firma la care lucrează. |