// Esempio di programmazione funzionale con Java 8
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

public class ListaPersone {
	private List< Persona > pe = Arrays.asList(new Persona("Saro", 24), new Persona("Taro", 21), 
		new Persona("Ian", 19), new Persona("Al", 16));

	public void estraiEtaPersone() {
		List< Integer > e = pe.stream()
			.map(x -> x.getEta())
			.collect(Collectors.toList());
		System.out.println("estrai eta: " + e);
	}

	public void sommaEtaPersone() {
		int s = pe.stream()
			.map(Persona::getEta)
			.reduce(0, (v, t) -> v + t);
		System.out.println("somma eta: " + s);
	}

	public void trovaPersona() {
		Comparator< Persona > c = Comparator.comparing(x -> x.getEta());
		Optional< Persona > pmax = pe.stream()
			.filter(x -> x.giovane())
			.max(c);
		if (pmax.isPresent()) System.out.println("trova persona: " + pmax.get().getNome());
	}

	public void trovaPersonaImper() {
		Persona pmax = null;
		for (Persona x : pe)
			if (x.getEta() < 26) {
				if (pmax == null) pmax = x;
				if (pmax.getEta() < x.getEta()) pmax = x;
			}
		if (pmax != null) System.out.println("persona: " + pmax.getNome());
	}
}
public class Persona {
	private String nome;
	private int eta;
	public Persona(String n, int e) {
		nome = n;
		eta = e;
	}
	public boolean giovane() {
		return eta < 26;
	}
	public int getEta() {
		return eta;
	}
	public String getNome() {
		return nome;
	}
}
public class Test {
	public static void main(String[] args) {
		ListaPersone cp = new ListaPersone();
		cp.estraiEtaPersone();
		cp.sommaEtaPersone();
		cp.trovaPersona();
	}
}

Output dell'esecuzione

estrai eta: [24, 21, 19, 16]
somma eta: 80
trova persona: Saro