import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;

class ContaLetras {

    public static void main(String[] args) {
      Map<String, Integer> ocorrencias;

      ocorrencias = contar("Vê se tira notas boas!");
      ocorrencias.forEach((chave, valor) -> System.out.print(chave + ":" + valor + " "));
    }

    private static Map<String, Integer> contar(String frase) {
      Map<String, Integer> resultado = new TreeMap<>(); // TreeMap para manter o Map ordenado pelas chaves
      List<String> ocorrencias;
      Set<String> letras;

      ocorrencias = Arrays.asList(frase.replace(" ", "").split("")); // Transforma a frase em uma lista que facilitará a contagem
      letras = new TreeSet<>(ocorrencias); // Pega as letras sem duplicidade 

      // Percorre o array de letras sem repetição contando as ocorrências
      letras.forEach((String letra) -> {
        resultado.put(letra, Collections.frequency(ocorrencias, letra));
      });

      return resultado;
    }
}
