在Java 8中合并两个列表的函数

时间:2017-12-22 23:02:44

标签: java functional-programming java-stream collectors binary-operators

如果我有一个字符串,我该如何创建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;
    }));

1 个答案:

答案 0 :(得分:2)

您不需要自己实施此行为 - 只需使用内置的Collectors#groupingBy

Map<Character, List<Integer>> occurs =
    IntStream.range(0, str.length())
             .boxed()
             .collect(Collectors.groupingBy(str::charAt));