Как отсортировать значения ArrayList по имени в Java - PullRequest
1 голос
/ 20 октября 2011

Я получаю информацию о студентах из базы данных,

ArrayList<Student> studentList = session.createQuery("from Student order by Date").list();

studentList содержит имя, идентификатор, оценки, по дате. Я хочу отобразить этот список по имени, потому что одно и то же имя учащегося содержит другую дату. Как отсортировать это от arraylist. Бывшее значение studentList

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

Я хочу отобразить это на

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

и сохранить его в другом списке массивов

Ответы [ 4 ]

6 голосов
/ 20 октября 2011

На этот ответ можно найти множество вопросов, таких как: /2168214/sortirovat-arraylist-polzovatelskih-obektov-po-svoistvu

Но вот пример программы того, что делать.Я предположил, что вы хотите отсортировать по имени, а затем по дате.Вы можете установить логику для этого в пользовательском компараторе.

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);
    }
  }
}

Вывод этого:

Unsorted
x 2010-10-5
z 2010-10-15
y 2010-10-05
x 2010-10-1
Sorted
x 2010-10-1
x 2010-10-5
y 2010-10-05
z 2010-10-15

EDIT : сортировка списка массивов,Сначала вам нужно будет скопировать его, если вы хотите добавить его в новый список.

5 голосов
/ 20 октября 2011

Методы, которые вам требуются:

Collections.sort(List<T>)

Collections.sort(List<T>, Comparator<? super T>)

Первый метод можно использовать, если ваш класс Student реализует интерфейс Comparable. В качестве примечания стоит подумать о том, должны ли ваши данные храниться в отсортированной структуре данных, такой как SortedMap (например, реализация TreeMap).

1 голос
/ 20 октября 2011

Тестовая реализация может быть:

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;
    }

}
1 голос
/ 20 октября 2011

Я написал каркас для сортировки текстовых представлений объектов на естественном языке в чувствительном к локали порядке:

http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/text/Localizables.html

Любой ученик должен будет реализовать Локализуемую или вам нужно будет предоставить StudentLocalizer путем расширения Localizer .

Maven:

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

Скачать:

http://sourceforge.net/projects/softsmithy/files/softsmithy/v0.1/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...