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

Java将列表转换为集合映射[duplicate]

那弘
2023-03-14

假设我有一个名为student的对象列表。对象Student的定义如下

public Class Student {
    private String studentName;
    private String courseTaking;
}

在学生列表中,可以有多个具有相同studentName但不同CourseTaking的学生对象。现在我想把学生名单变成一张studentName和courseTaking的地图,如下所示

Map<String, Set<String>>

关键是studentName,而值是将同一学生的所有课程设置放在一起作为一个集合。我如何使用stream()&collection()来实现这一点?

共有1个答案

杨阳飇
2023-03-14

我想这就是你要找的:

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;


public class StackOverflow {

  private static class SO46310655 {
    public static void main(String[] args) {
      final List<Student> students = new ArrayList<>();
      students.add(new Student("Zoff", "Java 101"));
      students.add(new Student("Zoff", "CompSci 104"));
      students.add(new Student("Zoff", "Lit 110"));
      students.add(new Student("Andreas", "Kotlin 205"));
      Map<String, Set<String>> map = students.stream().collect(
          Collectors.groupingBy(
              Student::getStudentName,
              Collectors.mapping(
                  Student::getCourseTaking,
                  Collectors.toSet()
              )
          )
      );
      System.out.println(map);
    }

    public static class Student {
      private final String studentName;
      private final String courseTaking;

      public Student(String studentName, String courseTaking) {
        this.studentName = studentName;
        this.courseTaking = courseTaking;
      }

      public String getStudentName() {
        return studentName;
      }

      public String getCourseTaking() {
        return courseTaking;
      }
    }
  }
}

yeilds{Andreas=[Kotlin 205],Zoff=[Java 101,CompSci 104,Lit110]}

 类似资料:
  • 我有一张这样的地图<代码>地图 我使用了对象映射器,但它不工作,因为映射在我的结构中包含另一个映射。

  • 我是Mapstruct的新手。我试图将列表转换为地图,我在网上搜索了很多,我有一些解决方案,比如它还没有在mapstruct中实现。如果有人能提供一些替代解决方案,我将很高兴。所有我希望转换映射如下: 现在是否可以使用MapStruct来实现?

  • 这是我的哈希图: 如何获得一个新的,它将包含每个客户的汽车数量,即的大小? 我想这样做没有循环,但只使用流。 我的尝试:

  • 编辑问题以包括所需的行为、特定的问题或错误,以及重现问题所需的最短代码。这将帮助其他人回答这个问题。 这是我的哈希映射: 如何获得一个新的,它将包含每个客户的汽车数量,即的大小? 我想不使用循环,但只使用流。 我的尝试:

  • 我有下面的pojo 此employee类用于从mybatis orm获取对象列表(list)。 mybatis将输出作为列表返回,因为mybatis不支持将Map作为返回类型 我必须把它转换成地图 我尝试了下面的方法,但没有成功,因为它需要getName()和getId()方法 请告知是否有一种方法可以在不修改员工pojo的情况下使用stream实现。 注意:我知道我们可以使用ofr或for ea

  • 用以下方法对物体进行成像: