// Esempio di programmazione funzionale con Java 8
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
// Nel seguito si implementano operazioni di somma, ricerca, estrazione massimo, su una lista di interi tramite Stream
public class Importi {
// Si dichiara e riempie la lista di valori interi
private List< Integer > importi = Arrays.asList(12, 34, 56, 78, 90, 45);
// somma in stile funzionale
public int calcolaSomma() {
// si ottiene la somma tramite reduce e un'espressione lambda
return importi.stream()
.reduce(0, (accum, v) -> accum + v);
}
public int calcolaSommaImper() {
int risultato = 0;
for (int v : importi) risultato += v;
return risultato;
}
public int estraiMassimo() {
return importi.stream()
.max(Integer::compare)
.get();
}
public List< Integer > estraiValori(int val) {
// si trovano gli elementi piu' grandi di un certo valore tramite filter
return importi.stream()
.filter(s -> s > val)
.collect(Collectors.toList());
}
public String congiungi() {
// si convertono e accumulano i valori tramite map e reduce
return importi.stream()
.map(s -> String.valueOf(s))
.reduce("", (res, v) -> res.concat(v));
}
}
public class Test {
public static void main(String[] args) {
Importi imp = new Importi();
int somma = imp.calcolaSomma();
System.out.println("Somma: " + somma);
if (somma == imp.calcolaSommaImper()) System.out.println("OK somma");
int max = imp.estraiMassimo();
System.out.println("Massimo: " + max);
System.out.println("Valori estratti: "+ imp.estraiValori(67)+"\n");
System.out.println("In stringa: "+imp.congiungi()+"\n");
}
}
Output dell'esecuzione
Somma: 315
OK somma
Massimo: 90
Valori estratti: [78, 90]
In stringa: 123456789045