// Esempio di programmazione funzionale con Java

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

/**
 * Figura rappresenta un quadrilatero, e tiene la misura dei lati e degli angoli
 */
public class Figura {
	private final Integer[] lato = new Integer[4];
	private final Integer[] angolo = new Integer[4];
	private int i = 0;

	public Figura(final int l0, final int l1, final int l2, final int l3, final int a1, final int a2, final int a3) {
		lato[0] = l0;
		lato[1] = l1;
		lato[2] = l2;
		lato[3] = l3;
		angolo[0] = 360 - a1 - a2 - a3;
		angolo[1] = a1;
		angolo[2] = a2;
		angolo[3] = a3;
	}

	public int getLato() {
		if (i < 3)
			i++;
		else
			i = 0;
		return lato[i];
	}

	public int getAngolo() {
		if (i < 3)
			i++;
		else
			i = 0;
		return angolo[i];
	}

	public int getPerimetro() {
		return lato[0] + lato[1] + lato[2] + lato[3];
	}

	public int getLatoMinore() {
		final List< Integer > l = Arrays.asList(lato);
		final Optional< Integer > vmin = l.stream().min(Integer::compare);
		if (vmin.isPresent())
			return vmin.get();
		return 0;
	}

	public boolean isQuadrato() {
		for (int i = 1; i < 3; i++)
			if (lato[i] != lato[0])
				return false;
		for (int i = 1; i < 3; i++)
			if (angolo[i] != angolo[0])
				return false;
		return true;
	}
}

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

public class MainFigura {
	private static List< Figura > flista = List.of(new Figura(6, 3, 6, 3, 90, 90, 90), new Figura(4, 5, 4, 5, 90, 90, 90),
			new Figura(5, 5, 5, 5, 90, 90, 90)); 

	public static void main(String[] args) {
		// trova il lato minore fra tutte le figure
		Optional< Integer > minLato = flista.stream()
							.map(f -> f.getLatoMinore())
							.min(Integer::compare);

		if (minLato.isPresent())
			System.out.println("Lato minore: " + minLato.get());

		// trova i quadrati
		List< Figura > quadr = flista.stream()
						.filter(f -> f.isQuadrato())
						.collect(Collectors.toList());

		quadr.forEach(q -> 
			System.out.println("Quadrato: " + q.getLato() + " " + q.getLato() + " " + q.getLato() + " " + q.getLato()));

		// trova somma perimetri
		int sumPerim = flista.stream()
						.map(f -> f.getPerimetro())
						.reduce(0, Integer::sum);

		System.out.println("Somma perimetri: " + sumPerim);
	}
}

Output dell'esecuzione

Lato minore: 3
Quadrato: 5 5 5 5
Somma perimetri: 56