Сортувати LinkedList на Java

У мене є список:

 LinkedList student = new LinkedList();

У класі Student він має атрибут String name. Я хочу відсортувати студентів списку за його назвою. Чи можу я це зробити?

1
Зробити його реалізованим Порівняння або передача порівнянна з функцією сортування
додано Автор user7, джерело
У алфавітному порядку?
додано Автор LAD, джерело
Здравствуйте, Райан, Ласкаво просимо до StackOverflow, як запропонували коментатори, ви можете шукати існуючі питання, на які вже відповіли. Якщо ви все ще вважаєте, що ваш випадок унікальний, надайте докладнішу інформацію.
додано Автор srikanth Nutigattu, джерело
Я думаю, ви можете подивитися на це: тут
додано Автор Andy, джерело

5 Відповіді

student.sort(Comparator.comparing(Student::getName));

Докладніше про компаратори .

2
додано

You can define a Comparator to do this. One easy way is with an anonymous class. https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html

Collections.sort(student, new Comparator() {
    public int compare(Student a, Student b) {
        return a.getName().compare(b.getName());
    }
};
1
додано
Якщо ви цитуєте Java 8, використовуйте лямбда.
додано Автор chrylis, джерело

Ви можете використовувати метод Collections.sort , який приймає компаратор як другий аргумент. Передайте компаратор , який визначає бажаний вам порядок. Наприклад, для класу Студент можна скористатися Collections.sort зі спеціальним компаратором , щоб відсортувати Student за зростанням порядок назви, як це:

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;

class Student {

    private final String name;
    private final int score;

    Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }

    @Override
    public String toString() {
        return "Student [name=" + name + ", score=" + score + "]";
    }

    public static void main(String[] args) {
        List list = new LinkedList<>(
                Arrays.asList(new Student("David", 3), new Student("Alice", 3), new Student("Thomas", 9)));

        System.out.println("Before Sort: " + list);

        Collections.sort(list, new Comparator() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.getName().compareTo(o2.getName());
            }
        });

        System.out.println("After Sort: " + list);
    }

}

Це дасть результат

before: [Student [name=David, score=3], Student [name=Alice, score=3], Student [name=Thomas, score=9]]
after: [Student [name=Alice, score=3], Student [name=David, score=3], Student [name=Thomas, score=9]]
0
додано

if you use java > 8. You can use Lambda expression, and you get something like this:

Collections.sort(student, (p1, p2) -> p1.name.compareTo(p2.name));

або Використовувати метод сортування у списку

student.sort((p1, p2) -> p1.name.compareTo(p2.name));

0
додано

просто ви можете використовувати це

   student.sort(Comparator.comparing(Student:: getName));//Single Sorting
    student.sort(Comparator.comparing(Student:: getName).reversed());//Single reverse Sorting
    student.sort(Comparator.comparing(Student:: getName).thenComparing(Student::getScore));//Double
0
додано
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників