如何在java中按名称对ArrayList值排序

如何在java中按名称对ArrayList值排序,java,arraylist,Java,Arraylist,我正在从数据库中获取学生信息 ArrayList<Student> studentList = session.createQuery("from Student order by Date").list(); 我想把这个展示给你 1 x 2010-10-01 1 x 2010-10-10 1 x 2010-10-17 2 y 2010-10-05 2 y 2010-10-15 3 z 2010-10-15 4 xx 2010-10-10 并将其存储到另一个数组列表中

我正在从数据库中获取学生信息

ArrayList<Student> studentList = session.createQuery("from Student order by Date").list();
我想把这个展示给你

1 x  2010-10-01
1 x  2010-10-10
1 x  2010-10-17
2 y  2010-10-05
2 y  2010-10-15
3 z  2010-10-15
4 xx 2010-10-10

并将其存储到另一个数组列表中

您需要的方法有:


如果您的学生类实现了可比较的接口,则可以使用第一种方法。作为旁注,值得考虑的是,实际上您的数据是否应该存储在排序数据结构中,如SortedMap,例如TreeMap实现。

您需要的方法是:


如果您的学生类实现了可比较的接口,则可以使用第一种方法。作为补充说明,值得考虑的是,您的数据是否应该存储在排序数据结构中,如SortedMap,例如TreeMap实现。

我已经编写了一个框架,用于按区域设置敏感顺序对对象的自然语言文本表示进行排序:

任何一个学生都需要实施 或者您必须通过扩展来提供StudentLocalizer

马文:

<dependency>  
    <groupId>org.softsmithy.lib</groupId>  
    <artifactId>lib-core</artifactId>  
    <version>0.1</version>  
</dependency>  
下载:


我已经编写了一个框架,可以按照区域设置敏感顺序对对象的自然语言文本表示进行排序:

任何一个学生都需要实施 或者您必须通过扩展来提供StudentLocalizer

马文:

<dependency>  
    <groupId>org.softsmithy.lib</groupId>  
    <artifactId>lib-core</artifactId>  
    <version>0.1</version>  
</dependency>  
下载:


有很多问题可以回答这个问题,例如:

但这里有一个示例程序说明了该怎么做。我想你应该先按名字排序,然后再按日期排序。您可以在自定义比较器中放入逻辑来实现这一点

import java.util.*;

public class SortExample {

  public static class Student {
    public String name;
    public String date;

    public Student(String name, String date) {
      this.name = name;
      this.date = date;
    }
  }

  public static class StudentComparator implements Comparator<Student> {
      @Override
      public int compare(Student s, Student t) {
         int f = s.name.compareTo(t.name);
         return (f != 0) ? f : s.date.compareTo(t.date);
      }
  }

  public static void main(String args[]) {
    ArrayList<Student> l = new ArrayList<Student>(Arrays.asList(
      new Student ("x","2010-10-5"),
      new Student ("z","2010-10-15"),
      new Student ("y","2010-10-05"),
      new Student ("x","2010-10-1")
    ));

    System.out.println("Unsorted");
    for(Student s : l) {
      System.out.println(s.name + " " + s.date);
    }

    Collections.sort(l, new StudentComparator());

    System.out.println("Sorted");
    for(Student s : l) {
      System.out.println(s.name + " " + s.date);
    }
  }
}

编辑:这将对数组列表进行适当排序。如果你想把它作为一个新的列表,你必须先把它复制下来。

要回答这个问题,有很多问题需要考虑,例如:

但这里有一个示例程序说明了该怎么做。我想你应该先按名字排序,然后再按日期排序。您可以在自定义比较器中放入逻辑来实现这一点

import java.util.*;

public class SortExample {

  public static class Student {
    public String name;
    public String date;

    public Student(String name, String date) {
      this.name = name;
      this.date = date;
    }
  }

  public static class StudentComparator implements Comparator<Student> {
      @Override
      public int compare(Student s, Student t) {
         int f = s.name.compareTo(t.name);
         return (f != 0) ? f : s.date.compareTo(t.date);
      }
  }

  public static void main(String args[]) {
    ArrayList<Student> l = new ArrayList<Student>(Arrays.asList(
      new Student ("x","2010-10-5"),
      new Student ("z","2010-10-15"),
      new Student ("y","2010-10-05"),
      new Student ("x","2010-10-1")
    ));

    System.out.println("Unsorted");
    for(Student s : l) {
      System.out.println(s.name + " " + s.date);
    }

    Collections.sort(l, new StudentComparator());

    System.out.println("Sorted");
    for(Student s : l) {
      System.out.println(s.name + " " + s.date);
    }
  }
}

编辑:这将对数组列表进行适当排序。如果希望将其作为新列表,则必须首先复制它。

测试实现可以是:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Execute {

    public static void main(String args[]) {
        List<Student> list = new ArrayList<Student>();

        list.add(new Student("TestX"));
        list.add(new Student("TestA"));

        System.out.println(list);

        Collections.sort(list);

        System.out.println(list);
    }

}

class Student implements Comparable<Student> {

    private String name;

    public Student() {
        super();
    }

    public Student(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public int compareTo(Student student) {
            if (this.name == null || student.name == null) {
                return 0;
            }
        return name.compareTo(student.name);
    }

    @Override
    public String toString() {
        return name;
    }

}

测试实现可以是:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Execute {

    public static void main(String args[]) {
        List<Student> list = new ArrayList<Student>();

        list.add(new Student("TestX"));
        list.add(new Student("TestA"));

        System.out.println(list);

        Collections.sort(list);

        System.out.println(list);
    }

}

class Student implements Comparable<Student> {

    private String name;

    public Student() {
        super();
    }

    public Student(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public int compareTo(Student student) {
            if (this.name == null || student.name == null) {
                return 0;
            }
        return name.compareTo(student.name);
    }

    @Override
    public String toString() {
        return name;
    }

}

如果您希望它按名称排序,那么为什么要查询它按日期排序?在数据库中对它进行排序肯定是更好的方法:从学生按姓名排序开始,日期应该这样做。如果你想按姓名排序,那么为什么要查询按日期排序的呢?在数据库中对其进行排序肯定是更好的方法:从学生按姓名排序,日期应该这样做。