【问题标题】:How can I populate a List from a HashMap in Java?如何从 Java 中的 HashMap 填充列表?
【发布时间】:2021-04-30 14:33:28
【问题描述】:

作为我的任务的一部分,我们获得了一个我们无法更改的接口,以及一些用于开发我们的方法的预定义测试。

界面如下:

public interface ContactTracer {
    public void addCourse(String courseID, String courseName);
    public void addStudent(String id, String name, String email);
    public void loadStudentCourseList(Map<String, String> enrolments);
    
    public String getStudentName(String studentID);
    public String getStudentEmail(String studentID);
    public String getCourseForStudent(String studentID);
    public String getCourseName(String courseID);
    public List<String> findStudentsForCourse(String courseID);
    public List<String> findContacts(String studentID);
}

我正在运行的特定测试:

@Test
void testLoadStudentCourseList()    {
    ContactTracer ct = new PartOneContactTracer();
    Map<String, String> enrolments = new HashMap<>();
    enrolments.put("S101", "SOFT01");
    enrolments.put("S102", "NET02");
    enrolments.put("S103", "SOFT01");
    ct.loadStudentCourseList(enrolments);
    List<String> students = ct.findStudentsForCourse("SOFT01");
    assertEquals(2, students.size());
    assertTrue(students.contains("S101"));
    assertTrue(students.contains("S103"));
}

以及我需要从测试中创建的方法:

@Override
public List<String> findStudentsForCourse(String courseID) {
    return null;
}

我可以从测试中看出,在findStudentsForCourse 方法中,我需要创建List&lt;String&gt; students 并用注册地图中匹配的学生填充它,然后返回列表。

我创建了以下字段:-

public class PartOneContactTracer implements ContactTracer {
    
    private Map<String, String> courseDetails = new HashMap<>();
    private Map<String, String> studentName = new HashMap<>();
    private Map<String, String> studentEmail = new HashMap<>();
    private Map<String, String> enrolments = new HashMap<>();

    ...
}

我无法理解的是如何将注册地图中的数据传递到学生列表中,以使测试中的断言为真。

【问题讨论】:

  • 你实现loadStudentCourseList了吗?你需要向我们展示这一点。在实现填充数据的方法之前,您将无法实现搜索某些数据的方法。因为你怎么能指望什么都能搜索呢? (你可以,但答案总是一样的:什么都没有)
  • @Michael 我认为他的问题是关于如何实现该方法,但如果他还没有尝试过,是的,他期待有人做他的工作而不是帮助解决问题。跨度>
  • @Michael 你当然是对的,我需要帮助的是loadStudentCourseList,我不知道为什么我包含了findStudentsForCourse 方法。显然让自己很困惑。为混乱道歉。
  • @Kaneda 这是我的一个真正的错误,我并不想让任何人为我做我的工作,只是在一些指导之后。
  • 将每个地图视为一组 A 到 B 关系,因为这就是地图。我也喜欢这样命名它们。所以我所有的地图都被命名为idToStudent。 ID是关键,学生是价值。在您的情况下,您有一些对我来说没有意义的地图。采取studentName。它代表什么?它是东西的名字吗?是ID来命名吗?还有什么?

标签: java list hashmap


【解决方案1】:

您不需要创建一个列表并填写它,只需在地图中搜索所有具有值(课程 ID)的键(学生):

public List<String> findStudentsForCourse(String courseId) {
    return enrolments.entrySet().stream()
        .filter(e -> e.getValue().equals(courseId))
        .map(e -> e.getKey())
        .collect(Collectors.toList());
}

【讨论】:

  • @Michael 我犯了一个错误,我想展示他如何在不填写列表的情况下做到这一点。在我看来,如果您需要使用列表的键或值搜索信息(当然在这种情况下),填写列表是没有意义的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-25
  • 2015-05-12
  • 2021-07-07
  • 2021-04-06
  • 2019-06-26
  • 1970-01-01
  • 2020-06-10
相关资源
最近更新 更多