package p13_pliki.tadeusz;

import java.io.File;
import java.io.FileNotFoundException;
import java.text.Collator;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class PoliczWszystkieSlowa3 {

	public static void main(String[] args) {
		System.out.println("Startujemy");
		// kolejność wg kluczy alfabetycznie
		Map<String, Integer> slownik = new TreeMap<>(Collator.getInstance());
		
		try(Scanner scanner = new Scanner(new File("pan_tadeusz.txt"))) {
			scanner.useDelimiter("[^\\p{L}\\d]+");
			while(scanner.hasNext()) {
				String slowo = scanner.next();
				// od Java 8 istnieje operacja merge, która służy dokładnie do realizacji takich schematów
				// podajemy wartość, która ma być wstawiona do słownika, oraz funkcję, która służy "zagregowania" poprzedniej wartości z nową wartością - tutaj jest to matematyczne dodawanie
				slownik.merge(slowo, 1, Integer::sum);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		
		slownik.forEach((slowo, ile) -> {
			System.out.printf("%-20s → %4d%n", slowo, ile);
		});
	}

}
