Ваша большая ошибка - использовать String вместо действительного класса Java. Ваша очередь должна содержать не строки, а объекты класса ученика, один с полями lastName, firstName и age (или dateOfBirth). Тогда вам будет проще сделать сортировку по свойствам класса намного .
так нет:
protected static Queue<Object> Q = new LinkedList<>();
а точнее
protected static Queue<Student> Q = new LinkedList<>();
Где у Student есть строковые поля экземпляра для lastName, firstName, а также int для возраста (или, опять же, лучше Date или LocalDate для даты рождения).
например.,
public class Student {
private String lastName;
private String firstName;
private int age;
public Student(String lastName, String firstName, int age) {
this.lastName = lastName;
this.firstName = firstName;
this.age = age;
}
public String getLastName() {
return lastName;
}
public String getFirstName() {
return firstName;
}
public int getAge() {
return age;
}
// hashCode and equals overrides are not essential
// but they can be helpful if you want to see
// if your collection contains an object of interest
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((firstName == null) ? 0 : firstName.hashCode());
result = prime * result + ((lastName == null) ? 0 : lastName.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (firstName == null) {
if (other.firstName != null)
return false;
} else if (!firstName.equals(other.firstName))
return false;
if (lastName == null) {
if (other.lastName != null)
return false;
} else if (!lastName.equals(other.lastName))
return false;
return true;
}
// You don't absolutely need a toString() method, but it makes printing out
// your results a bit easier
@Override
public String toString() {
return "Student [lastName=" + lastName + ", firstName=" + firstName + ", age=" + age + "]";
}
}
Таким образом, вы можете сортировать, используя свойства каждого элемента в коллекции, например, с помощью Comparator.
Проверьте эту ссылку на String Obsession Anti-Pattern , чтобы узнать больше о том, почему вы хотите избегать использования строк, где допустимые объекты Java определенного класса будут работать лучше.
Примечания:
- Избегайте использования
<Object>
в качестве универсального параметра, поскольку он полностью исключает любую выгоду от использования универсальных параметров.
- Избегайте использования статических полей, если можете.
- Избегайте логических выражений, таких как:
while (quit == false) {
. Это так легко испортить и вместо этого набрать while (quit = false) {
, что приводит к совершенно другому поведению. Гораздо лучше, тем проще и элегантнее while (!quit) {