diagramma UML delle classi
// classe che implementa metodi aventi ciascuno un singolo compito

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.util.List;
import java.util.ArrayList;

public class Pagamenti {      // Pagamenti vers 1.2
	private List< Float > importi = new ArrayList< >(); // attributo per lista di valori

	public void leggiFile(String c, String n) throws IOException {
		final LineNumberReader f = new LineNumberReader(new FileReader(new File(c, n)));
		String riga;
		while (true) {
			riga = f.readLine();          // legge una linea dal file
			if (null == riga) break;      // controlla se il file e' finito
			inserisci(Float.parseFloat(riga));
		}
		f.close();
	}
	
	public void inserisci(float x) {
		if (!importi.contains(x))         // inserisce solo valori distinti
			importi.add(x);               // aggiunge in lista
	}
	
	public float calcolaSomma() {
		float risultato = 0;
		for (float v : importi)
			risultato += v;               // somma l'elemento della lista
		return risultato;
	}
	
	public float calcolaMassimo() {
		float risultato = 0;
		for (float v : importi)
			if (risultato < v) 
				risultato = v;
		return risultato;
	}
	
	public void svuota() {
		importi = new ArrayList < >();
	}
}
// classe che chiama metodi di Pagamenti
// compilare con javac MainPagamenti.java
// eseguire con java MainPagamenti
import java.io.IOException;

public class MainPagamenti {
	public static void main(String[] args) {
		System.out.println("inizio esecuzione");
		Pagamenti p = new Pagamenti();

		try {
			p.leggiFile("csvfiles", "Importi.csv");
		} catch (IOException e) {
				// nel caso in cui il file non venisse trovato
		}
		
		System.out.println("massimo "+p.calcolaMassimo());
		System.out.println("somma "+p.calcolaSomma());
	}
}
// test per la classe Pagamenti
import java.io.IOException;

public class TestPagamenti {  // per Pagamenti vers 1.2
	private Pagamenti pgm = new Pagamenti();
	
	private void initLista() {
		pgm.svuota();
		pgm.inserisci(321.01f);
		pgm.inserisci(531.7f);
		pgm.inserisci(1234.5f);
	}
	
	public void testSommaValori() {
		initLista();
		if (pgm.calcolaSomma() == 2087.21f) // test che si autovaluta
			System.out.println("OK test somma val");
		else System.out.println("FAILED test somma val");
	}
	
	public void testLeggiFile() {
		pgm.svuota();
		try {
			pgm.leggiFile("csvfiles", "Importi.csv"); 
			System.out.println("OK test leggi file");
		} catch (IOException e) {
			System.out.println("FAILED test leggi file");
		}
	}
	
	public void testMaxValore() {
		initLista();
		pgm.calcolaMassimo();
		if (pgm.calcolaMassimo() == 1234.5f)
			System.out.println("OK test massimo val");
		else System.out.println("FAILED test massimo val");
	}
	
	public static void main(String[] args) {
		TestPagamenti tl = new TestPagamenti();
		tl.testLeggiFile();
		tl.testSommaValori();
		tl.testMaxValore();
	}
}