Есть класс User
, в котором заданы 6 имен и 6 фамилий и который создает случайного человека со случайным именем, фамилией и возрастом. В нем реализован интерфейс Comparable
который сортирует по фамилии, если они одинаковы то по имени, если они одинаковы то по возрасту. Создан список из 100 не повторяющихся User
и отсортирован.
А также есть класс Student
который наследуется от User
и имеет поле группы с вариантами "java", "c++", "python", "qa", "desing", "frontend", и реализует интерфейс Comparable
. Создан список из 100 не повторяющихся Student
, и отсортирован.
Проблема состоит в том, что мне Student
нужно отсортировать по полям группы, а потом уже по остальным полям (по фамилии, если они одинаковы то по имени, если они одинаковы то по возрасту), я не могу понять как добавить поле group
в сортировку? Потому как при запуске кода, на консоль выводит сортировку без поля группы. Ниже привожу весь код для понимания общей картины.
public enum FirstName {
IGOR(0),
ALEXEY(1),
DMITRIY(2),
ANDREY(3),
EVGENIY(4),
NIKOLAY(5);
int value;
FirstName(int value) {
this.value = value;
}
}
public enum SecondName {
PETROV(0),
IVANOV(1),
SIDOROV(2),
PETRENKO(3),
EGOROV(4),
RUDKOVSKIY(5);
int value;
SecondName(int value) {
this.value = value;
}
}
public class User implements Comparable<User> {
private FirstName firstName;
private SecondName secondName;
private int age;
private static Random random = new Random();
public User() {
this.firstName = firstName.values()[random.nextInt(FirstName.values().length)];
this.secondName = secondName.values()[random.nextInt(SecondName.values().length)];
this.age = random.nextInt(15) + 30;
}
@Override
public int compareTo(User user) {
int result = Integer.compare(secondName.value, user.secondName.value);
if (result == 0) {
result = Integer.compare(firstName.value, user.firstName.value);
}
if (result == 0) {
result = Integer.compare(age, user.age);
}
return result;
}
}
public class Student extends User {
private enum Group {
JAVA(0),
C(1),
PYTHON(2),
QA(3),
DESIGN(4),
FRONTEND(5);
int value;
Group(int value) {
this.value = value;
}
}
private Group group;
private static Random random = new Random();
public Student() {
this.group = Group.values()[random.nextInt(Group.values().length)];
}
public int compareTo(User user) {
int result = 0;
if (user instanceof Student) {
Student student = (Student) user;
result = group.compareTo(student.group);
}
if (result == 0) {
return super.compareTo(user);
} else {
return result;
}
}
public class Main {
public static void main(String[] args) {
List<User> users = new ArrayList<>();
int size = 100;
while (users.size() < size) {
User user = new User();
if (!users.contains(user)) {
users.add(user);
}
}
System.out.println("List of 100 non-repeating `User`:");
System.out.println(" ");
users.forEach(System.out::println);
Collections.sort(users);
System.out.println("====================================");
System.out.println(" ");
System.out.println("Sorted list `User`:");
System.out.println(" ");
users.forEach(System.out::println);
System.out.println(" ");
List<Student> students = new ArrayList<>();
while (students.size() < size) {
Student student = new Student();
if (!students.contains(student)) {
students.add(student);
}
}
System.out.println("List of 100 non-repeating `Student`:");
System.out.println(" ");
users.forEach(System.out::println);
Collections.sort(students);
System.out.println("====================================");
System.out.println(" ");
System.out.println("Sorted list `Student`:");
System.out.println(" ");
users.forEach(System.out::println);
}
}
Ошибка копипаста. Вы заполняете и сортируете список студентов, а выводите список юзеров
System.out.println("List of 100 non-repeating `Student`:");
System.out.println(" ");
// users.forEach(System.out::println);
// ^^^^^ Ошибка!!!
students.forEach(System.out::println);
Collections.sort(students);
System.out.println("====================================");
System.out.println(" ");
System.out.println("Sorted list `Student`:");
System.out.println(" ");
// users.forEach(System.out::println);
// ^^^^^ Ошибка!!!
students.forEach(System.out::println);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
интересует вопрос, каким образом можно массив разделить на два ряда в конечном отображении? На данный момент массив отображается одним рядом
Я новичок в андроид разработкеУ меня вопрос
Что я упустил в дженериках? Эта конструкция валидна, но убирая дженерик у стрима Stream stream = liststream(); уже не валидна?