当前位置: 首页 > 知识库问答 >
问题:

用流填充MAP

蓬长恨
2023-03-14
public Map<String, Map<String, Integer>> authorFragmentation(List<Commit> commits) {

        return commits.stream()
                      .map(Commit::getChangesList)
                      .flatMap(changes -> changes.stream())
                      .collect(Collectors.toMap(
                              Changes::getPath,
                              Collectors.toMap(
                                 Commit::getAuthorName, 
                                 (changes) -> 1,
                                 (oldValue, newValue) -> oldValue + 1)));
}

我试过了,但这不起作用。我如何在一个带有流的映射中创建这个映射,同时计算更改?

共有1个答案

云文栋
2023-03-14

Jeremy Grand的评论是完全正确的:在收集器中,人们早就忘记了您是从commit对象流开始的,因此不能在那里使用commit::GetAuthorName。问题是如何将作者的名字保留到您也得到路径的地方。一种解决方案是将两者放入一个新创建的字符串数组中(因为两者都是字符串)。

public Map<String, Map<String, Long>> authorFragmentation(List<Commit> commits) {
    return commits.stream()
            .flatMap(c -> c.getChangesList()
                    .stream()
                    .map((Changes ch) -> new String[] { c.getAuthorName(), ch.getPath() }))
            .collect(Collectors.groupingBy(sa -> sa[1], 
                    Collectors.groupingBy(sa -> sa[0], Collectors.counting())));
}

collectors.counting()坚持计数到long,而不是integer,因此我修改了您的返回类型。我确信如果需要的话,转换为integer是可能的,但是我首先会考虑是否可以使用long

它不是最漂亮的流代码,我将等待看是否有其他建议出现。

 类似资料:
  • 我有一个非常简单的Java/Spring应用程序来演示KStream的功能,但不幸的是,我无法使KStream加载数据。想法是创建一个KStream对象,并使用controller GET方法简单地检索其内容。示例代码: 问题-主题中有消息,但foreach(...)中的KStream枚举没有从中检索任何结果。KStream对象状态为“RUNning”,日志中没有错误。 生成随机应用程序ID并将A

  • 问题内容: 我是Java 8的新手,目前无法完全掌握Streams,是否可以使用Stream功能操作填充数组?这是我如何使用标准的for循环来实现的示例代码: 如果有可能,我将如何使用Stream?如果可能,是否方便(性能和可读性明智)? 问题答案: 在这里,您有一个解决方案,它生成数组而不是修改先前定义的变量: 如果要使用并行流,那么避免诸如修改变量(数组或对象)之类的副作用非常重要。这可能会导

  • 当创建一个应用时,你将会想将多个控件放入一个窗口控件。我们的第一个 helloworld 范例仅仅使用了一个控件,因而我们可以只是简单地调用一个gtk_container_add()将控件填充到一个窗口控件。但是当你想要向窗口控件中放置超过一个控件时,控制每一个控件的位置和大小就变得很重要了。这就是接下来要讲的填充。 GTK+自带了大量各种布局的容器,这些容器的目的是控制被添加到他们的子控件的布局

  • 问题内容: 是否可以用int []填充JComboBox?我正在编写一个代码,该代码将使用填充了年份(整数)的JComboBox。 我写的代码是这样的: 我希望将它们转换为ComboBox中的整数,以便可以从中减去。我是否必须用字符串填充ComboBox,然后在输入它们之后使它们成为整数?还是有一种方法可以用int []实际填充ComboBox? 问题答案: 是泛型的,但是Java泛型不支持原始类

  • 我试图翻译这个(简化)代码使用Java-8流: 以下是我尝试过的: 但以上给出了所有

  • 问题内容: 我有一个JSON请求,该请求从youtube返回一个响应,其中包含对特定视频的评论。我目前有3种文本视图:一种用于名称/上载器,一种用于内容,一种用于发布日期- 然后用我的JSON响应中的数据填充。 我的问题是-仅出现第一个评论,发布日期和上传者。 我相信我将需要用列表视图替换我的textviews并将其解析为3个字段-我只是不知道如何。 爪哇 公共类Player扩展了YouTubeB