富国沪深
两个解决方案示例:forEach Lambda - Java 8 或更高版本经典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 testprivate 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; }}}