【问题标题】:Sort LinkedList in Java [duplicate]在Java中对LinkedList进行排序[重复]
【发布时间】:2019-01-14 02:04:21
【问题描述】:

我有一个列表:

 LinkedList<Student> student = new LinkedList<Student>();

在Student类中,有一个属性String name。我想按名称对列表学生进行排序。 有什么办法可以做到吗?

【问题讨论】:

  • 按字母顺序?
  • 让它实现 Comparable 或者传递一个可比较的排序函数
  • 我想你可以看看这个:here
  • 您好 Ryan,欢迎来到 StackOverflow,正如评论员所建议的,您可以搜索已经回答的现有问题。如果您仍然认为您的案例是独一无二的,请提供更多详细信息。

标签: java sorting linked-list


【解决方案1】:
student.sort(Comparator.comparing(Student::getName));

阅读更多关于comparators的信息。

【讨论】:

    【解决方案2】:

    您可以定义一个比较器来执行此操作。一种简单的方法是使用匿名类。 https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html

    Collections.sort(student, new Comparator<Student>() {
        public int compare(Student a, Student b) {
            return a.getName().compare(b.getName());
        }
    };
    

    【讨论】:

    • 如果您引用 Java 8,请使用 lambda。
    【解决方案3】:

    你可以用这个

       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
    

    【讨论】:

      【解决方案4】:

      您可以使用Collections.sort 方法接受comparator 作为其第二个参数。传入一个comparator,它定义了你想要的顺序。例如,给定一个Student 类,您可以使用Collections.sort 和自定义comparator 按名称升序排列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<Student> 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<Student>() {
                  @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]]
      

      【讨论】:

        【解决方案5】:

        如果你使用 java > 8. 你可以使用 Lambda 表达式,你会得到这样的结果:

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

        或在列表中使用排序方法

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

        【讨论】:

          猜你喜欢
          • 2019-05-23
          • 1970-01-01
          • 2016-01-16
          • 2017-02-09
          • 2014-12-26
          • 2016-10-14
          • 2012-09-20
          • 2019-03-13
          • 2013-08-28
          相关资源
          最近更新 更多