Galera, estou travado em um exercício do livro “Java, como programar”. Eu tenho ideia de como fazer ele com iteração externa, porém como o capítulo é de Lambdas e Streams, acredito que deve haver alguma maneira de fazê-lo por iteração interna. Mas como?
O exercício é baseado no código:
> public class StreamOfLines
> {
> public static void main(String[] args) throws IOException
> {
> // Regex that matches one or more consecutive whitespace characters
> Pattern pattern = Pattern.compile("\\s+");
> // count occurrences of each word in a Stream<String> sorted by word
> Map<String, Long> wordCounts =
> Files.lines(Paths.get("Chapter2Paragraph.txt"))
> .map(line -> line.replaceAll("(?!')\\p{P}", ""))
> .flatMap(line -> pattern.splitAsStream(line))
> .collect(Collectors.groupingBy(String::toLowerCase,
> TreeMap::new, Collectors.counting()));
>
> // display the words grouped by starting letter
> wordCounts.entrySet()
> .stream()
> .collect(
> Collectors.groupingBy(entry -> entry.getKey().charAt(0),
> TreeMap::new, Collectors.toList()))
> .forEach((letter, wordList) ->
> {
> System.out.printf("%n%C%n", letter);
> wordList.stream().forEach(word -> System.out.printf(
> "%13s: %d%n", word.getKey(), word.getValue()));
> });
> }
> } // end class StreamOfLines
E a questão:
17.9 (Resumindo os caracteres em um arquivo) Modifique o programa da Figura 17.17 para resumir o número de ocorrências de cada
caractere no arquivo.