This shows you the differences between two versions of the page.
poo-ca-cd:laboratoare:java-features [2025/01/07 21:50] dragos.dragan1403 [Metode statice și metode default în interfețe] |
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 :-) | ||
- | ==== Metode default și metode default în interfețe ==== | + | |
+ | <hidden> | ||
+ | * utilizarea de structuri sintactice introduse începând cu Java 8 (var) | ||
+ | </hidden> | ||
+ | ==== 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. | ||
+ | |||
+ | === Metode statice === | ||
+ | Metodele statice, în cadrul unei interfețe, se comportă identic cu metodele statice din clasă, în sensul că ele se apelează sub forma ''SomeInterface.metodaStatica()'' și că acestea nu sunt moștenite nici de clasele care implementează interfața respectivă și nici de interfețele care extind respectiva interfață. | ||
+ | |||
+ | <code java> | ||
+ | public interface SomeInterface { | ||
+ | static void doStuff() { | ||
+ | System.out.println("Doing something"); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // apelul metodei statice | ||
+ | SomeInterface.doStuff(); | ||
+ | </code> | ||
=== Metode default === | === Metode default === | ||
Line 209: | 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 254: | 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 310: | 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 445: | 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 453: | 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 Devmind, 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]] |