SlideShare a Scribd company logo
1 of 50
Download to read offline
18/09/20 1
speaker
www.webturing.net
ezio sperduto
FUNCTIONAL PROGRAMMING IN JAVA
Le espressioni LAMBDA
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
Ezio Sperduto?
formazione
• laurea Informatica, Sapienza
• PhD Ing. Informatica, Roma3
• 4+ certificazioni Java Oracle
• 3+ certificazioni Project Management
appassionato di informatica
esperienza
• programmatore
• software engineer
• software architect
• docente Java
• docente Algoritmi Universitàstartup e aziende
• 10+ anni fondazione e guida azienda Infosons
• ora, CEO azienda turing
community e meetup
• Code Garden Roma (partecipazione/organizzazione)
• XPUG Roma, JUG Milano/Torino, GraphRM, Ben, Algorand, Docker Roma, Angular Roma…
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
LAMBDA
Java linguaggio prevalentemente OO
In Java 8 aggiunta abilità FP
Non in alternativa ma insieme
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
LAMBDA
Object Oriented programming:
Functional programming:
Sintesi in Java 8:
«tutti gli elementi sono OGGETTI»
«tutti gli elementi sono FUNZIONI»
«trattare le funzioni come oggetti,
e semplificare definizione, chiamata, manipolazione»
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
SINTASSI
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
SINTASSI
a -> a + a
input
nome parametro
output
calcolo della funzione
simbolo funzione
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
SINTASSI
(a) -> a + a
input
nome parametro
output
calcolo della funzione
simbolo funzione
parentesi tonde parametro
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
SINTASSI
(String a) -> a + a
input
nome parametro
output
calcolo della funzione
simbolo funzione
tipo parametro
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
SINTASSI
a -> . . .
(a,b) -> . . .
(String a) -> . . .
(int x, String y) –> . . .
() -> . . .
PARENTESI parametro obbligatorie:
• se #params ≠ 1
• se c’è qualificatore di tipo
TIPO parametro:
• O su tutti
• O su nessuno
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
SINTASSI
. . . -> <ESPRESSIONE>
. . . -> {<BLOCCO-ISTRUZIONI>}
PARENTESI graffe corpo obbligatorie:
• se usiamo corpo funzione classico
• se restituiamo void
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
SINTASSI
. . . -> 2 * a + 3
. . . -> {int b = 2*a; return b+3;}
Nel secondo esempio:
• semicolon obbligatorio dopo ogni istruzione,
anche l’ultima
• return obbligatorio, se necessario risultato
PARENTESI graffe corpo obbligatorie:
• se usiamo corpo funzione classico
• se restituiamo void
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
SINTASSI
Nel corpo, che variabili posso toccare?
-> quasi tutte!
• campi di classe
• campi d’istanza
• variabili locali (effectively final)
• parametri di metodo (effectively final)
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
a -> {int a = 2*3; return a+a;}
SINTASSI
NON è possibile ridefinire i parametri nel corpo!
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
COSA FA JAVA SOTTO?
metodoCaller( a -> a + a )
equivale a
interface RaddoppiaInterface{
public abstract int raddoppia(int a);
}
class RaddoppiaConcrete implements RaddoppiaInterface{
public int raddoppia(int a){
return a+a;
}
}
/* ******************** */
RaddoppiaInterface istanza = new RaddoppiaConcrete();
metodoCaller(istanza);
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FUNCTIONAL INTERFACE
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FUNCTIONAL INTERFACE
Definizione:
una functional interface (fi) è un interfaccia con un
solo metodo astratto
Ogni Lambda-expression è un’implementazione di una fi
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FUNCTIONAL INTERFACE
In Java 8, alle interfacce sono stati aggiunti:
• metodi statici
• metodi di default
Attenzione a riconoscere le fi!
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
interface A{}
interface B{
default void m1(){}
}
interface C{
void m2();
}
. . .
FUNCTIONAL INTERFACE
. . .
interface D extends B,C{
static void m3();
}
interface E extends C{}
interface F extends C{
default void m3(){}
}
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
interface A{
int calcola1(int i);
}
FUNCTIONAL INTERFACE
interface B{
String calcola2(double d,char c,short[] sa);
}
Il tipo di una fi è il tipo del suo metodo astratto!
tipo: (int) -> int tipo: (double,char,short[]) -> String
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FUNCTIONAL INTERFACE
Passaggio di parametro lambda: non occorre conoscere il
nome della fi e del metodo astratto
interface Xxx{
int yyyy(int i1,int i2);
}
void metodoChiamante(Xxx lambda){
...
}
metodoChiamante((a,b)->a+b);
metodoChiamante((c,d)->2*c+d);
metodoChiamante((s,t)->s);
(int,int) -> int
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FUNCTIONAL INTERFACE
Annotation specifica in java.lang per annotare
un’interfaccia funzionale:
@FunctionalInterface
… ma l’uso non è obbligatorio!
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FUNCTIONAL INTERFACE EXERCISE!
@FunctionalInterface
interface Magia{
int calcola(int a,int b,int c);
}
static void caller(Magia m){
System.out.println("invocato caller!");
}
. . .
caller( LAMBDA??? );
Come possiamo invocare caller?
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FUNCTIONAL INTERFACE EXERCISE!
@FunctionalInterface
interface Manipolatore<T>{
T trasforma(int x);
}
static void caller(Manipolatore<String> m){
System.out.println("invocato caller!");
}
. . .
caller( LAMBDA??? );
Come possiamo invocare caller?
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FUNCTIONAL INTERFACE EXERCISE!
class Rettangolo{int b,h;}
void applicaFiltro(List<Rettangolo> l,Filtro f){
for(Rettangolo r:l)
if(f.verifica(r))
l.remove(r);
}
Come dichiaro Filtro?
Come invoco applicaFiltro?
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FUNCTIONAL INTERFACE
Dove reperire fi?
1. costruirle custom
2. qualunque pre-java8 (compliant)
3. built-in in java.util.function
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FUNCTIONAL INTERFACE EXERCISE!
Interfaccia: Runnable
che lambda posso passare?
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FUNCTIONAL INTERFACE EXERCISE!
Interfaccia: Runnable
che lambda posso passare?
() -> { System.out.println("ciao"); }
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FUNCTIONAL INTERFACE EXERCISE!
Interfaccia: Comparator<Rettangolo>
che lambda posso passare?
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FUNCTIONAL INTERFACE EXERCISE!
Interfaccia: Comparator<Rettangolo>
che lambda posso passare?
(r1,r2) -> r2.b - r1.b
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FUNCTIONAL INTERFACE EXERCISE!
Interfaccia: ActionListener
che lambda posso passare?
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FUNCTIONAL INTERFACE EXERCISE!
e -> { JOptionPane.showMess... }
Interfaccia: ActionListener
che lambda posso passare?
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FI BUILT-IN
Package: java.util.function
nome input output
Predicate<T> T boolean
Function<T,R> T R
Supplier<T> void T
Consumer<T> T void
BiFunction<T,U,R> T,U R
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FI BUILT-IN
Conoscendo il tipo, è possibile avere una
referenza alla lambda:
Function<String,Integer> lunghezza = s -> s.length();
ed è possibile passarla ad un metodo:
void caller(Function<String,Integer> funzione){...}
caller(lunghezza);
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FI BUILT-IN
Metodi all’interno delle fi
• Predicate.test(...)
• Function.apply(...)
• Supplier.get()
• Consumer.accept(...)
• BiFunction.apply(...)
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
PREDICATE
Predicate<Integer> maggioriCento = i -> i>100;
Predicate<Integer> negativi = i -> i<0;
List<Integer> filtraConPred(List<Integer> l,Predicate<Integer> p){
List<Integer> res=new ArrayList<>();
for(Integer i:l)
if(p.test(i)) res.add(i);
return res;
}
...
List<Integer> l = Arrays.asList(2,-1,120,130,-99,60);
filtraConPred(l,maggioriCento);
filtraConPred(l,negativi);
Output: 120, 130 e -1, -99
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
PREDICATE EXERCISE!
1. Costruire un predicato filtro che restituisca i numeri pari.
2. Costruire un metodo che prenda un Set e un predicato e
restituisca una coppia (magari array da 2) di Set con i valori
ripartiti tra quelli con predicato vero e quelli con predicato falso.
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
PREDICATE
Alle vecchie API sono state aggiunte nuove funzionalità
sfruttando le nuove fi built-in, esempio:
Predicate<String> p = s -> s == null;
List<String> lista = Arrays.asList("aaa","","b","","cccc",null);
lista.removeIf(p);
lista.removeIf(s -> s.isEmpty());
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FUNCTION
Function<String,String> f = s->s.substring(0,2);
Esempio:
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
FUNCTION EXERCISE!
Costruire una funzione che prende e restituisce una stringa:
1. senza spazi iniziali e finali
2. minuscola
3. senza vocali
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
SUPPLIER e CONSUMER
Supplier<Integer> genera10 = () -> ((int)(Math.random()*10)) + 1;
Esempi:
Consumer<Object> cons = o -> {registro.put(o.toString(),o)};
e
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA FI BUILT-IN
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
METHOD REFERENCE
Riferimento a metodi pre-esistenti in classi
OPERATORE ::
class Rettangolo{
...
int area(){...}
}
Rettangolo r=new Rettangolo();
caller(r::area);
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
METHOD REFERENCE
E' possibile usare la method reference in 4 casi
differenti:
1. metodi statici
2. metodi d'istanza (su un'istanza specifica)
3. metodi d'istanza (su un'istanza a runtime)
4. costruttori
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
METHOD REFERENCE
Metodi statici
class Rettangolo{
static void calcola(int a,int b){...}
}
caller(Rettangolo::calcola);
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
METHOD REFERENCE
Metodi d'istanza (su un'istanza specifica)
class Rettangolo{
...
int area(){...}
}
Rettangolo r=new Rettangolo();
caller(r::area); // che firma?
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
METHOD REFERENCE
Metodi d'istanza (su un'istanza a runtime)
class Rettangolo{
...
int area(){...}
}
caller(Rettangolo::area); // che firma?
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
METHOD REFERENCE
Costruttori
class Rettangolo{
...
Rettangolo(){...}
Rettangolo(int a,int b){...}
}
caller(Rettangolo::new); // che firma?
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
METHOD REFERENCE EXERCISE!
Metodo aggiunto a List:
default void forEach(Consumer action){...}
il metodo scorre e applica action ad ogni elemento.
List<Integer> lista = Arrays.asList(3,5,6,3,2);
lista.forEach( ??? );
Cosa passare per stampare ogni elemento?
www.webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
METHOD REFERENCE EXERCISE!
Costruire una funzione comp binaria che prende due
funzioni, e restituisca una funzione che rappresenti la
composizione delle due!!!
Esempio: comp(f,g) = g(f(x))
www.webturing.net
Thank You – Q & A
www.webturing.net
ezio.sperduto@webturing.net
linkedin.com/in/sperduto info@webturing.net
ezio sperduto
Functional programming in Java – Le Espressioni LAMBDA
endorse me on:
Java, Functional Programming, Lambda
Send your CV!
slide: tiny.cc/sperduto-lambda

More Related Content

What's hot

Packages in java
Packages in javaPackages in java
Packages in javajamunaashok
 
entity-relationship-diagram-chen-&-crow -model.ppt
entity-relationship-diagram-chen-&-crow -model.pptentity-relationship-diagram-chen-&-crow -model.ppt
entity-relationship-diagram-chen-&-crow -model.pptIRWANBINISMAILKPMGur1
 
Object Oriented Programing JAVA presentaion
Object Oriented Programing JAVA presentaionObject Oriented Programing JAVA presentaion
Object Oriented Programing JAVA presentaionPritom Chaki
 
Patterns in Python
Patterns in PythonPatterns in Python
Patterns in Pythondn
 
Object-oriented Programming-with C#
Object-oriented Programming-with C#Object-oriented Programming-with C#
Object-oriented Programming-with C#Doncho Minkov
 
Structure of C++ - R.D.Sivakumar
Structure of C++ - R.D.SivakumarStructure of C++ - R.D.Sivakumar
Structure of C++ - R.D.SivakumarSivakumar R D .
 
Oops concepts || Object Oriented Programming Concepts in Java
Oops concepts || Object Oriented Programming Concepts in JavaOops concepts || Object Oriented Programming Concepts in Java
Oops concepts || Object Oriented Programming Concepts in JavaMadishetty Prathibha
 
Comparable/ Comparator
Comparable/ ComparatorComparable/ Comparator
Comparable/ ComparatorSean McElrath
 
Console Io Operations
Console Io OperationsConsole Io Operations
Console Io Operationsarchikabhatia
 

What's hot (20)

Packages in java
Packages in javaPackages in java
Packages in java
 
OOP java
OOP javaOOP java
OOP java
 
Program control statements in c#
Program control statements in c#Program control statements in c#
Program control statements in c#
 
EER modeling
EER modelingEER modeling
EER modeling
 
C# Constructors
C# ConstructorsC# Constructors
C# Constructors
 
OOPS IN C++
OOPS IN C++OOPS IN C++
OOPS IN C++
 
entity-relationship-diagram-chen-&-crow -model.ppt
entity-relationship-diagram-chen-&-crow -model.pptentity-relationship-diagram-chen-&-crow -model.ppt
entity-relationship-diagram-chen-&-crow -model.ppt
 
Object Oriented Programing JAVA presentaion
Object Oriented Programing JAVA presentaionObject Oriented Programing JAVA presentaion
Object Oriented Programing JAVA presentaion
 
Patterns in Python
Patterns in PythonPatterns in Python
Patterns in Python
 
Object-oriented Programming-with C#
Object-oriented Programming-with C#Object-oriented Programming-with C#
Object-oriented Programming-with C#
 
Structure of C++ - R.D.Sivakumar
Structure of C++ - R.D.SivakumarStructure of C++ - R.D.Sivakumar
Structure of C++ - R.D.Sivakumar
 
SQL Data Manipulation
SQL Data ManipulationSQL Data Manipulation
SQL Data Manipulation
 
Oops concepts || Object Oriented Programming Concepts in Java
Oops concepts || Object Oriented Programming Concepts in JavaOops concepts || Object Oriented Programming Concepts in Java
Oops concepts || Object Oriented Programming Concepts in Java
 
Comparable/ Comparator
Comparable/ ComparatorComparable/ Comparator
Comparable/ Comparator
 
WCF
WCFWCF
WCF
 
Basic SQL and History
 Basic SQL and History Basic SQL and History
Basic SQL and History
 
Encapsulation C++
Encapsulation C++Encapsulation C++
Encapsulation C++
 
Console Io Operations
Console Io OperationsConsole Io Operations
Console Io Operations
 
Java beans
Java beansJava beans
Java beans
 
Oracle Index
Oracle IndexOracle Index
Oracle Index
 

Similar to Functional Programming in Java - Le Espressioni Lambda

LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsJUG Genova
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java BaseK-Tech Formazione
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con ScalaFranco Lombardo
 
Testing in javascript
Testing in javascriptTesting in javascript
Testing in javascriptPiero Bozzolo
 
Java 8: le nuove-interfacce di Ezio Sperduto
Java 8: le nuove-interfacce di Ezio SperdutoJava 8: le nuove-interfacce di Ezio Sperduto
Java 8: le nuove-interfacce di Ezio SperdutoVitalij Zadneprovskij
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5Matteo Baccan
 
Functional Programming per tutti
Functional Programming per tuttiFunctional Programming per tutti
Functional Programming per tuttiGiancarlo Valente
 
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02Alberto Pasca
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, javaMatteo Baccan
 
Deep diving C# 4 (Raffaele Rialdi)
Deep diving C# 4 (Raffaele Rialdi)Deep diving C# 4 (Raffaele Rialdi)
Deep diving C# 4 (Raffaele Rialdi)DotNetMarche
 
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...UltraUploader
 
Programmazione Funzionale per tutti
Programmazione Funzionale per tuttiProgrammazione Funzionale per tutti
Programmazione Funzionale per tuttiSalvatore Sorrentino
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéEdmondo Porcu
 
Acadevmy - TypeScript Overview
Acadevmy - TypeScript OverviewAcadevmy - TypeScript Overview
Acadevmy - TypeScript OverviewFrancesco Sciuti
 
Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of KotlinErik Minarini
 

Similar to Functional Programming in Java - Le Espressioni Lambda (20)

LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMs
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java Base
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
 
Testing in javascript
Testing in javascriptTesting in javascript
Testing in javascript
 
Java 8: le nuove-interfacce di Ezio Sperduto
Java 8: le nuove-interfacce di Ezio SperdutoJava 8: le nuove-interfacce di Ezio Sperduto
Java 8: le nuove-interfacce di Ezio Sperduto
 
Vb.Net
Vb.NetVb.Net
Vb.Net
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5
 
Functional Programming per tutti
Functional Programming per tuttiFunctional Programming per tutti
Functional Programming per tutti
 
Corso java base
Corso java baseCorso java base
Corso java base
 
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
 
Riepilogo Java C/C++
Riepilogo Java C/C++Riepilogo Java C/C++
Riepilogo Java C/C++
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, java
 
Deep diving C# 4 (Raffaele Rialdi)
Deep diving C# 4 (Raffaele Rialdi)Deep diving C# 4 (Raffaele Rialdi)
Deep diving C# 4 (Raffaele Rialdi)
 
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
 
Ruby in 25 minuti
Ruby in 25 minutiRuby in 25 minuti
Ruby in 25 minuti
 
Programmazione Funzionale per tutti
Programmazione Funzionale per tuttiProgrammazione Funzionale per tutti
Programmazione Funzionale per tutti
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perché
 
Acadevmy - TypeScript Overview
Acadevmy - TypeScript OverviewAcadevmy - TypeScript Overview
Acadevmy - TypeScript Overview
 
Java 8
Java 8Java 8
Java 8
 
Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of Kotlin
 

Functional Programming in Java - Le Espressioni Lambda