Вы на самом деле близки, чтобы завершить начатое, вам нужно использовать промежуточную операцию mapToObj
и коллектор groupingBy
вместо partitioningBy
следующим образом:
Map<Character, Long> result = "a simple sentence".chars()
.mapToObj(c -> (char) c)
.collect(groupingBy(Function.identity(),
counting()));
или если вы хотите, чтобы ключи карты были строками, вы можете сделать:
Map<String, Long> result = "a simple sentence".chars()
.mapToObj(c -> String.valueOf((char) c))
.collect(groupingBy(Function.identity(),
counting()));
или если вы хотите, чтобы встречались все символы кроме символа пробела:
Map<String, Long> result = "a simple sentence".chars()
.filter(c -> !Character.isSpaceChar(c))
.mapToObj(c -> String.valueOf((char) c))
.collect(groupingBy(Function.identity(),
counting()));
или используяшаблон:
Map<String, Long> result =
Pattern.compile("\\s+")
.splitAsStream("a simple sentence")
.flatMap(s -> Arrays.stream(s.split("")))
.collect(groupingBy(Function.identity(),
counting()));
более эффективная версия с использованием шаблона:
Map<String, Long> result =
Pattern.compile("")
.splitAsStream("a simple sentence")
.filter(s -> !s.trim().isEmpty())
.collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));