为了账号安全,请及时绑定邮箱和手机立即绑定

如果我有 ArrayList,如何比较两个 HashMap?

如果我有 ArrayList,如何比较两个 HashMap?

扬帆大鱼 2022-06-15 16:43:21
我不能继续我的HashMap作业了。你能帮助我吗?我有 2 HashMap:mtutors和mstudents.mtutors关键:他们的名字。mtutors价值:一个主题。mstudents关键:他们的名字。mstudents值:主题(ArrayList)我必须找到匹配的导师-学生。例如: mtutors 键之一:Peter Parker。mtutors 的价值之一:数学。学生关键之一:比尔·盖茨。学生的价值之一:数学,IT。配对:彼得帕克和比尔盖茨 - 数学。HashMap<String,String> mtutors = new HashMap<>();HashMap<String,ArrayList> mstudents = new HashMap<>();for(int i=0;i<tutors.size();i++)    mtutors.put(tutors.get(i).firstName + " "           + tutors.get(i).lastName, tutors.get(i).subject);for(int i=0;i<students.size();i++)    mstudents.put(students.get(i).firstName + " "           + students.get(i).lastName, students.get(i).students);
查看完整描述

3 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

如果您使用的是 Java8 或更高版本,请尝试以下操作:


mtutors.forEach((tutorName, subject) -> {

        mstudents.forEach((studentName, subjects) -> {

            if (subjects.contains(subject)) {

                System.out.println(tutorName + ":" + studentName + ":" + subject);

            }

        });

    });

我假设您将科目(不是学生)放到学生地图上。


仅获得第一次拟合的数据流示例。


mtutors.forEach((tutorName, subject) -> {

        mstudents.entrySet().stream()

                .filter(entry -> entry.getValue().contains(subject))

                .findFirst()

                .ifPresent(entry -> System.out.println(tutorName + ":" + entry.getKey() + ":" + subject));

    });


查看完整回答
反对 回复 2022-06-15
?
隔江千里

TA贡献1906条经验 获得超10个赞

我的回答类似于@ŁukaszKucik 的回答,只是使用 Java 流。您可能不应该将我的解决方案用于您的作业,因为我想这不是您应该解决的方法。不过,只是为了多样化:

List<String> matches = mtutors.entrySet()
                .stream()
                .flatMap(tutor -> mstudents.entrySet()
                        .stream()
                        .filter(student -> student.getValue()
                                .contains(tutor.getValue()))
                        .map(student -> tutor.getKey() + " and " + student.getKey() + " - " + tutor.getValue()))
                .collect(Collectors.toList());

如果缺少的部分是list.contains()https ://www.tutorialspoint.com/java/util/arraylist_contains.htm

如果您缺少的部分是如何解决这种组合,那么仅仅在这里寻求解决方案并不是学习和家庭作业的工作方式。


查看完整回答
反对 回复 2022-06-15
?
富国沪深

TA贡献1790条经验 获得超9个赞

两个解决方案示例:

  1. forEach Lambda - Java 8 或更高版本

  2. 经典for循环

对未来的建议:

一个。不要直接使用类变量——而是根据 Java Bean 规范创建 getter/setter 对。然后使用它们:例如,改为tutors.get(i).lastName使用tutors.get(i).getLastName()

湾。for即使只有一行,在编写循环时也要使用大括号 - 它可以防止循环体出现意外的拼写错误。例如

for (int i = 0; i < students.size(); i++) {

        mstudents.put(students.get(i).getFirstName() + " " + students.get(i).getLastName(), students.get(i).getSubjects());

    }

代替


for (int i = 0; i < students.size(); i++)

        mstudents.put(students.get(i).firstName + " " + students.get(i).lastName, students.get(i).subjects);

======================


package org.tempuri.tests;


import java.util.Arrays;

import java.util.HashMap;

import java.util.LinkedList;

import java.util.List;

import java.util.Map.Entry;


public class SimpleTest {


  public static void main(String[] args) {


    // Just for test - inbound data

    Tutor mathTutor = new Tutor("Peter", "Parker", "MATH");

    Tutor physicsTutor = new Tutor("Tonny", "Stark", "PHYSICS");

    Tutor computersTutor = new Tutor("Steve", "Rogers", "COMPUTERS");


    Student freshmen = new Student("Bill", "Gates", Arrays.asList("MATH", "COMPUTERS"));

    Student sophomore = new Student("Peter", "Quill", Arrays.asList("MATH", "COMPUTERS", "PHYSICS"));

    Student senior = new Student("Peggy", "Carter", Arrays.asList("MATH", "PHYSICS"));


    List<Tutor> tutors = Arrays.asList(mathTutor, physicsTutor, computersTutor);

    List<Student> students = Arrays.asList(freshmen, sophomore, senior);


    // Untouched question code (almost ...)

    HashMap<String, String> mtutors = new HashMap<>();

    HashMap<String, List<String>> mstudents = new HashMap<>();

    for (int i = 0; i < tutors.size(); i++)

        mtutors.put(tutors.get(i).firstName + " " + tutors.get(i).lastName, tutors.get(i).subject);


    for (int i = 0; i < students.size(); i++)

        mstudents.put(students.get(i).firstName + " " + students.get(i).lastName, students.get(i).subjects);


    // variation 1. using forEach Lambda (> Java 8)

    List<MatchingPair> matchingPairs1 = new LinkedList<>();


    mtutors.entrySet().forEach(tutorEntry -> {


        mstudents.entrySet().forEach(studentEntry -> {

            if (studentEntry.getValue().contains(tutorEntry.getValue()))

                matchingPairs1

                        .add(new MatchingPair(tutorEntry.getKey(), studentEntry.getKey(), tutorEntry.getValue()));

        });


    });


    System.out.println("result variation1: ");

    System.out.println("------------------ ");


    matchingPairs1.forEach(onePair -> System.out.println("Tutor: " + onePair.getTutorName() + " -> Student: "

            + onePair.getStudentName() + " -> Subject: " + onePair.getSubject()));


    // variation 2. using classical for loops (< Java 7)

    final List<MatchingPair> matchingPairs2 = new LinkedList<>();


    for (Entry<String, String> oneTutor : mtutors.entrySet()) {

        for (Entry<String, List<String>> oneStudent : mstudents.entrySet()) {


            if (oneStudent.getValue().contains(oneTutor.getValue())) {

                matchingPairs2.add(new MatchingPair(oneTutor.getKey(), oneStudent.getKey(), oneTutor.getValue()));

            }

        }

    }

    System.out.println("------------------ ");

    System.out.println();

    System.out.println("result variation2: ");

    System.out.println("------------------ ");


    for (MatchingPair onePair : matchingPairs2) {

        System.out.println("Tutor: " + onePair.getTutorName() + " -> Student: " + onePair.getStudentName() + " -> Subject: "

                + onePair.getSubject());

    }

    System.out.println("------------------ ");

}



    // supporting classes for test

private static class MatchingPair {


    private String tutorName;

    private String studentName;

    private String subject;


    MatchingPair(String tutorName, String studentName, String subject) {

        this.tutorName = tutorName;

        this.studentName = studentName;

        this.subject = subject;

    }


    public String getTutorName() {

        return tutorName;

    }


    public void setTutorName(String tutorName) {

        this.tutorName = tutorName;

    }


}


private static class Tutor {


    String firstName;

    String lastName;

    String subject;


    Tutor(String firstName, String lastName, String subject) {


        this.firstName = firstName;

        this.lastName = lastName;

        this.subject = subject;


    }


    public String getFirstName() {

        return firstName;

    }


    public void setFirstName(String firstName) {

        this.firstName = firstName;

    }


    public String getLastName() {

        return lastName;

    }


    public void setLastName(String lastName) {

        this.lastName = lastName;

    }


    public String getSubject() {

        return subject;

    }


    public void setSubject(String subject) {

        this.subject = subject;

    }


}


private static class Student {


    String firstName;

    String lastName;

    List<String> subjects;


    Student(String firstName, String lastName, List<String> subjects) {


        this.firstName = firstName;

        this.lastName = lastName;

        this.subjects = subjects;


    }


    public String getFirstName() {

        return firstName;

    }


    public void setFirstName(String firstName) {

        this.firstName = firstName;

    }


    public String getLastName() {

        return lastName;

    }


    public void setLastName(String lastName) {

        this.lastName = lastName;

    }


    public List<String> getSubjects() {

        return subjects;

    }


    public void setSubjects(List<String> subjects) {

        this.subjects = subjects;

    }


}

}



查看完整回答
反对 回复 2022-06-15
  • 3 回答
  • 0 关注
  • 180 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号