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

问题描述 投票:3回答:1

如果我有一个字符串,我该如何创建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;
    }));
java functional-programming java-stream collectors binary-operators
1个回答
2
投票

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

Map<Character, List<Integer>> occurs =
    IntStream.range(0, str.length())
             .boxed()
             .collect(Collectors.groupingBy(str::charAt));
© www.soinside.com 2019 - 2024. All rights reserved.