Проблема в том, что не знаю как вывести какой либо объект типа ua.edu.kep.LR_7.StudentInfo. Например, как вывисти на экран максимальный балл всех студентов с карты studentsInfo?
Класс StudentsMap:
package ua.edu.kep.LR_7;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
public class StudentsMap {
public static void main(String[] args) {
Map<String, StudentInfo> studentsInfo = new HashMap<String, StudentInfo>();
StudentInfo info = new StudentInfo();
info.setMinimal((float) 7);
info.setAverage((float) 8.4);
info.setMaximal((float) 10);
studentsInfo.put("Вася Пупкін", info);
info.setMinimal((float) 9);
info.setAverage((float) 10.1);
info.setMaximal((float) 11);
studentsInfo.put("Нехлюй Петро", info);
info.setMinimal((float) 6);
info.setAverage((float) 8.6);
info.setMaximal((float) 10);
studentsInfo.put("Придорожний Семен", info);
}
}
Класс StudentInfo:
package ua.edu.kep.LR_7;
public class StudentInfo {
private float minimal;
private float average;
private float maximal;
public float getMinimal(){
return minimal;
}
public void setMinimal( float value ){
minimal = value;
}
public float getAverage(){
return average;
}
public void setAverage( float value ){
average = value;
}
public float getMaximal(){
return maximal;
}
public void setMaximal( float value ){
maximal = value;
}
}
Во-первый у тебя ошибка при добавлении в Map
. Ты всегда используешь info
. В результате, ты его переиспользуешь, вместо того, чтобы реально создать три разных объекта StudentInfo
. В итоге у тебя в info
всегда будут данные только последние что ты добавил. и получится, что все три студента у тебя имеют значения:
6.0
8.6
10.0
чтобы этого не было, надо создавать отдельные объекты для каждого студента. Например, если данные устанавливаются при инициализации (хотя по методам setMinimal/setAverage/setMaximal это и не скажешь), то достаточно объявить конструктор, в который передать параметры инициализации:
public StudentInfo(float min,float avg, float max){
minimal = min;
average = avg;
maximal = max;
}
И тогда данные будут заполняться так:
Map<String, StudentInfo> studentsInfo = new HashMap<String, StudentInfo>();
studentsInfo.put("Вася Пупкін", new StudentInfo(7f, 8.4f, 10f));
studentsInfo.put("Нехлюй Петро", new StudentInfo(9f, 10.1f, 11f));
studentsInfo.put("Придорожний Семен", new StudentInfo(6f, 8.6f, 10f));
Чтобы вывести максимальный балл каждого студента, нужно просто организовать цикл по Map
и вывести соответствующие данные с помощью методов get
System.out.println("Максимальный бал студентов: ");
for (Map.Entry<String, StudentInfo> entry : studentsInfo.entrySet()) {
StudentInfo studentInfo = entry.getValue();
System.out.println(entry.getKey() + ": " + studentInfo.getMaximal());
}
Если имелось в виду вывести вообще студентов с максимальным баллом, то для этого нужно
Пример со стримами Java8:
public static Map<String, StudentInfo> getStudentWithMax(Map<String, StudentInfo> students){
float maxItem = students.entrySet().stream().map(el -> el.getValue().getMaximal()).max(Float::compareTo).get();
Map<String, StudentInfo> result = students.entrySet().stream().filter(num -> num.getValue().getMaximal() == maxItem).collect(Collectors.toMap(
e -> e.getKey(),
e -> e.getValue()
));
return result;
}
public static void main(String[] args) throws Exception {
Map<String, StudentInfo> students = new HashMap<String, StudentInfo>();
students.put("Вася Пупкін", new StudentInfo(7f, 8.4f, 10f));
students.put("Нехлюй Петро", new StudentInfo(9f, 10.1f, 11f));
students.put("Придорожний Семен", new StudentInfo(6f, 8.6f, 11f));
System.out.println("Студенты с максимальным баллом: ");
Map<String, StudentInfo> studentWithMax = getStudentWithMax(students);
for (Map.Entry<String, StudentInfo> stringStudentInfoEntry : studentWithMax.entrySet()) {
System.out.println(stringStudentInfoEntry.getKey());
}
}
Пример без стримов Java8
public static Map<String, StudentInfo> getStudentWithMax2(Map<String, StudentInfo> students){
float max = 0f;
Map<String, StudentInfo> result = new HashMap<>();
for (Map.Entry<String, StudentInfo> entry : students.entrySet()) {
StudentInfo studentInfo = entry.getValue();
if (studentInfo.getMaximal() == max)
result.put(entry.getKey(), studentInfo);
if (studentInfo.getMaximal() > max) {
max = studentInfo.getMaximal();
result.clear();
result.put(entry.getKey(), studentInfo);
}
}
return result;
}
public static void main(String[] args) throws Exception {
Map<String, StudentInfo> students = new HashMap<String, StudentInfo>();
students.put("Вася Пупкін", new StudentInfo(7f, 8.4f, 10f));
students.put("Нехлюй Петро", new StudentInfo(9f, 10.1f, 11f));
students.put("Придорожний Семен", new StudentInfo(6f, 8.6f, 11f));
System.out.println("Студенты с максимальным баллом: ");
Map<String, StudentInfo> studentWithMax = getStudentWithMax2(students);
for (Map.Entry<String, StudentInfo> stringStudentInfoEntry : studentWithMax.entrySet()) {
System.out.println(stringStudentInfoEntry.getKey());
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Здравствуйте! Вопрос очень абстрактный, я это понимаю и ответ естественно жду примерно такой же
Есть компонент TextEdit, в котором набирается текстНабранный текст надо поместить в одну строку, а признаки перевода строки заменить на какие...
есть структуры которых уже больше 2 десятковпомогите улучшить код
Здравствуйте! Есть класс-роутер, который проверяет URI и на его основании составляет внутренний маршрут в системеСтолкнулся с проблемой при...