java - 在 Java 中对项目进行分组

标签 java

我知道在 java 中我可以对如下项目进行分组:

System.out.println(Arrays.asList(1,2,3,3,4,2,2).stream()
    .collect(Collectors.groupingBy(Function.identity(),
                                   Collectors.counting()))); 

这将返回:

{1=1, 2=3, 3=2, 4=1}

但是我有以下代码:

public static void main(String[] args) { 
    final int NO_OF_STUDENTS = 10000;
    Student[] students = createStudents(NO_OF_STUDENTS);
}

这里我有一个学生数组,其中包含许多学生对象,每个学生都有 .getGrade() 方法。

我正在尝试做类似的事情:

System.out.println(Arrays.asList(students.getGrade()).stream()
    .collect(Collectors.groupingBy(Function.identity(),
                                   Collectors.counting()))); 

我知道学生数组本身没有 .getGrade() 方法,但它的元素有。我想要的是我可以将所有学生的成绩从 students 数组传递到 Arrays.asList() 方法,我不知道该怎么做.

最佳答案

为什么不使用 map方法?

System.out.println(Arrays.stream(students)
        .map(Student::getGrade)
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())));

在这里,我将学生流映射到成绩流,然后对它们进行分组。

我认为指出您不需要使用 Arrays.asList 是件好事。为了这。您可以直接使用 Arrays.stream 创建学生流数组.

关于java - 在 Java 中对项目进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46653859/

相关文章:

java - Firebase数据库 : Model is missing a constructor with no arguments

java - 如何在 IntelliJ 中为 VM 设置内存?我必须单独设置 Tomcat 内存选项吗?

java - 运行 ExportSnapshot 时抛出 ClassNotFoundException

java - 从广播接收器发送数据到android中的自定义线程不起作用?

java - 安卓AVD “Unfortunately, <app> has stopped.”

java - 如何更换新线

java - Java 是 "pass-by-reference"还是 "pass-by-value"?

java - 如何将值添加到 List<Map<String, Object>> 中?

java - 如何使用 Java 凭据连接到网络驱动器?

java - 在 Java 中使 GUI 适应屏幕尺寸