java - 分组以找到最小流

标签 java java-stream

我有以下内容(简化了我的真实类(class))HashMap<User, Counter>

class User {
  private String name;
  private Integer age;
}

class Counter {
  private Integer numberOfQuestions;
  private Long maxQuestionId;
}

我想找出最低年龄的问题总数。

例如

UserA, 20 -> 11, 100L;
UserB, 25 -> 15, 100L;
UserC, 23 -> 30, 100L;
UserD, 20 -> 11, 100L,
UserE, 25 -> 15, 100L;

结果应该是22 -> 每个年龄的最小问题数之和(年龄:20,nOfQuestions 11+11=22)

我尝试使用 java 流:

    Integer min = userQuestionHashMap.entrySet().stream()
// not working    .collect(groupingBy(Map.Entry::getKey::getAge), 
                      summingInt(Map.Entry::getValue::getNumOfQuestion))
                   )
// missing
                    .mapToInt(value -> value.getValue().getNumOfQuestion())
                    .min().orElse(0);

最佳答案

您可以按用户年龄分组并使用 summingInt 作为下游。然后通过key从result map中找到min:

Integer sum = map.entrySet().stream()
            .collect(groupingBy(entry -> entry.getKey().getAge(),
                    summingInt(value -> value.getValue().getNumberOfQuestions())))
            .entrySet().stream()
            .min(Map.Entry.comparingByKey())
            .orElseThrow(RuntimeException::new)
            .getValue();

关于java - 分组以找到最小流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60541882/

相关文章:

loops - 使用流迭代 n 次而不是使用 for 循环来创建 n 个项目

java - RESTEasy 有任何帮助程序来创建应用程序配置吗?

java - 枚举上的 Hibernate Projections.sum()

java - 何时使用 map 和 forEach

java - 使用收集器将列表转换为对象映射 - Java

收集实体的 Java Stream

java.net.ConnectException : Connection refused

java - 为什么以下代码在使用数据源建立 mysql 到 java 的连接时抛出异常

java - 如何从纯 Java 中的 MKV 文件中提取字幕?

java - 在 Java 中,流相对于循环的优势是什么?