Как отсортировать набор в список

1

В Android у меня есть Set, и я хочу превратить его в отсортированный List.

Как это сделать с Collections.sort()?

protected List<PackageInfo> doInBackground(Void... params) {

        Set<PackageInfo> adPackages = new HashSet<PackageInfo>();
        //ArrayList<PackageInfo> adPackages = new ArrayList<PackageInfo>();

        [..............]

        return new ArrayList<PackageInfo>(adPackages);
        //return adPackages;
    }
Теги:
arraylist
set
sorting

4 ответа

6
Лучший ответ

В списке есть конструктор, который позволяет вам создавать его с помощью любой коллекции. Затем используйте метод Collections.sort(List list).

Например

Set<String> set = new HashSet<String>();
set.add("This is a unsorted set");
List<String> list = new ArrayList<String>(set);
Collections.sort(list); // or Collections.sort(list, Comparator);

Приветствия.

  • 0
    Если вы собираетесь предложить заполнить список другой структурой данных, почему бы не сообщить OP о отсортированных структурах данных?
  • 0
    Потому что другие уже заявили, что метод ... я просто даю другой вариант. Может быть случай, когда OP ограничен отсортированным списком (хотя я не могу себе представить, почему), но мой ответ просто дает другой выбор. :)
2

IMHO, я бы использовал SortedSet вместо стандартного Set, а затем использовал метод ) rel=nofollow> addAll интерфейса List для преобразования набора (который неявно отсортирован) в отсортированный список без необходимости выполнять сортировку вне структур данных.

Обратите внимание, что это потребует, чтобы объекты, хранящиеся в этих структурах данных, реализовали интерфейс Comparable.

2

Это не вопрос Android. Ищите java sort, comparator. Вот хороший учебник: http://docs.oracle.com/javase/tutorial/collections/interfaces/order.html

1

Я думаю, это может сработать для вас

public void sortArrayPackage(ArrayList<PackageInfo> array)
{
  Collections.sort(array, new Comparator<PackageInfo>(){
    public int compare(PackageInfo o1, PackageInfo o2) {
      System.setProperty("java.util.Arrays.useLegacyMergeSort", "true");
      String package1 = o1.packageName;
      String package2 = o2.packageName;

      return package1.compareTo(package2);
    }
  });
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню