JAVA STREAM API: 5 USI PIU' COMUNI
A partire da Java 8, tutte le classi che implementano l'interfaccia Collection possono costituire la sorgente di uno stream. Esso è una sorta di Iterator infinito, lazy ed attraversabile un'unica volta dove sui suoi elementi è possibile effettuare operazioni terminali o intermedie. Le prime generano un risultato di un determinato tipo mentre le seconde un nuovo stream su cui è possibile invocare nuove operazioni in un processo a catena.
L'utilizzo delle stream API in combinazione con le lambda costituisce un modo super efficace di lavorare con le collezioni.
Diamo quindi un'occhiata agli utilizzi più comuni di queste API.
- FILTER: utilizzato per rimuovere valori all'interno di una collection sulla base di una determinata condizione.
List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7); List<Integer> oddNUmbers = numbers.stream().filter(el -> el % 2 == 0).collect(toList());
- REDUCE: utilizzato per applicare una funzione ad ogni elemento della collection ritornando però un unico valore.
List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7); int sum = numbers.stream().reduce(0, (a,b) -> a + b);
- GROUPING: raggruppa gli elementi della collection sulla base di una determinata condizione.
class BlogPost { String title; String author; String type; } BlogPost post1 = new BlogPost(); post1.author = "Test"; post1.title = "Title test"; post1.type = "NEWS"; BlogPost post2 = new BlogPost(); post2.author = "Test 2"; post2.title = "Title test 2"; post2.type = "GUIDE"; BlogPost post3 = new BlogPost(); post3.author = "Test 3"; post3.title = "Title test 3"; post3.type = "GUIDE"; List<BlogPost> posts = Arrays.asList(post1, post2, post3); Map<String, List<BlogPost>> map = posts.stream().collect(Collectors.groupingBy(el -> el.type));
- FINDING: trova il primo o qualsiasi elemento della collection che "fa scopa" con il criterio specificato.
List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7); Optional<Integer> firstOdd = numbers.stream().filter(el -> el % 2 == 0).findFirst();
- SORTING: come si evince dal nome, ordina gli elementi di una collection. E' possibile utilizzare il metodo sorted in accoppiata con un Comparator per regole di ordinamento più complesse.
List<Integer> numbers = Arrays.asList(10,2,11,4,1,6,3); List<Integer> sortedList = numbers.stream().sorted().toList();
Comments
Post a Comment