package p13_pliki.tadeusz;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class PoliczWszystkieSlowa2 {

	public static void main(String[] args) {
		Map<String, Integer> slownik = new HashMap<>();
		
		System.out.println("Liczenie słów");
		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 getOrDefault, której można użyć i dzięki temu nie pisać ifa
				int ileBylo = slownik.getOrDefault(slowo, 0);
				slownik.put(slowo, ileBylo+1);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		
		System.out.println("Sortowanie");
		// sortowanie wyników wg wartości - pobieramy listę wpisów i sortujemy wg wartości, a po drugie wg kluczy
		List<Map.Entry<String, Integer>> lista = new ArrayList<>(slownik.entrySet());
		lista.sort(Map.Entry.comparingByValue());
		
		System.out.println("Wypisywaie wyników:");
		for(Map.Entry<String, Integer> entry : lista) {
			System.out.printf("%-20s → %4d%n", entry.getKey(), entry.getValue());
		}
	}

}
