如果我有一个字符串,我该如何创建Map<Character, List<Integer>>
来映射每个字符在使用流时出现的索引。这就是我现在所拥有的,它的工作方式是否更优雅?
Map<Character, List<Integer>> occurs = IntStream.range(0, str.length())
.boxed()
.collect(toMap(str::charAt , Arrays::asList, (v1, v2) -> {
List<Integer> list = new ArrayList<>();
list.addAll(v1);
list.addAll(v2);
return list;
}));
答案 0 :(得分:2)
您不需要自己实施此行为 - 只需使用内置的Collectors#groupingBy
:
Map<Character, List<Integer>> occurs =
IntStream.range(0, str.length())
.boxed()
.collect(Collectors.groupingBy(str::charAt));