java - java 8中两个列表的合并函数

标签 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;
    }));

最佳答案

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

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

关于java - java 8中两个列表的合并函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47948296/

相关文章:

algorithm - 红黑树包含过多的黑色节点和过少的红色节点

python - 返回列表列表而不是列表的映射的实现

java - 为什么平面映射和收集树集列表会返回一个对象?

java - 当每个对象可以分为多个组时如何对对象进行分组?

java - 如何为 Mac OS 10.6 下载 Java SE 1.5

Java多线程时间切换

java - 使用正则表达式过滤并查找字符串中的整数

java - Java 中是否有等效的 ASP.NET 控件缓存和 Post-cache 替换

programming-languages - 寻找函数式语言

java - 使用方法参数查找数组最小值的优雅方法?