Java 8 解决方案:我会编写一个对象并丢弃分数最低的对象。请在下面找到代码 sn-p。
public class Main {
public static void main(String[] args) {
String[] names = {"Peter", "James", "Roger", "Peter", "Jose"};
String[] subjects = {"English", "Math", "English", "Science", "Math"};
int[] grades = {96, 67, 78, 84, 100};
System.out.println(getStudentWithHighScoredSubjects(names, subjects, grades));
}
public static Map<String, String> getStudentWithHighScoredSubjects(String[] names, String[] subjects, int[] grades) {
return IntStream.range(0, names.length)
.mapToObj(i -> new StudentHighestGradeSubject(names[i], subjects[i], grades[i]))
.collect(Collectors.toMap(StudentHighestGradeSubject::getName, Function.identity(), (s1, s2) -> {
if (s1.getGrade() > s2.getGrade()) {
return s1;
} else {
return s2;
}
}, LinkedHashMap::new))
.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey, e-> e.getValue().getHighestGradeSubject(), (s1, s2) -> s2, LinkedHashMap::new));
}
private static class StudentHighestGradeSubject {
private String name;
private String highestGradeSubject;
private int grade;
public StudentHighestGradeSubject(String name, String highestGradeSubject, int grade) {
this.name = name;
this.highestGradeSubject = highestGradeSubject;
this.grade = grade;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getHighestGradeSubject() {
return highestGradeSubject;
}
public void setHighestGradeSubject(String highestGradeSubject) {
this.highestGradeSubject = highestGradeSubject;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
StudentHighestGradeSubject that = (StudentHighestGradeSubject) o;
return Objects.equals(name, that.name);
}
@Override
public int hashCode() {
return Objects.hash(name);
}
}
}
上面给出了执行时的以下输出
{Peter=English, James=Math, Roger=English, Jose=Math}