Дополнительно
Сортировка ArrayList пользовательских объектов по свойствам
Я читал о сортировке ArrayLists с помощью Comparator, но во всех примерах люди использовали compareTo
, который, согласно некоторым исследованиям, является методом для строк.
Я хотел отсортировать ArrayList пользовательских объектов по одному из их свойств: объекту Date
(getStartDay()
). Обычно я сравниваю их по принципу item1.getStartDate().before(item2.getStartDate())
, поэтому мне стало интересно, могу ли я написать что-то вроде:
public class CustomComparator {
public boolean compare(Object object1, Object object2) {
return object1.getStartDate().before(object2.getStartDate());
}
}
public class RandomName {
...
Collections.sort(Database.arrayList, new CustomComparator);
...
}
1090
20
Поскольку
Date
реализуетComparable
, у него есть методcompareTo
, как и уString
.Поэтому ваш пользовательский
Comparator
может выглядеть следующим образом:Метод
compare()
должен возвращатьint
, поэтому вы не можете напрямую возвращатьboolean
, как вы планировали в любом случае.Ваш код сортировки будет примерно таким, как вы написали:
Если вам не нужно повторно использовать компаратор, можно написать его в виде анонимного класса:
Since [tag:java-8]
Теперь вы можете записать последний пример в более короткой форме, используя лямбда-выражение для
Comparator
:А у
List
есть методsort(Comparator)
, так что вы можете сократить его еще больше:Это настолько распространенная идиома, что существует встроенный метод для генерации
Comparator
для класса с ключомComparable
:Все это эквивалентные формы.
Классов, что есть естественный порядок сортировки (класс, количество, в качестве примера) должны реализовать comparable интерфейс, в то время как классы, которые имеет естественный порядок сортировки (класса стул, как пример) должны быть обеспечены компаратор (или компаратор анонимный класс).
Два примера:
Использование:
Для сортировки и класса ArrayList можно использовать следующий фрагмент кода:
Да, можно. Есть два варианта сравнения элементов: интерфейс Comparable и интерфейс Comparator.
Оба эти интерфейса обеспечивают разное поведение. Comparable позволяет заставить объект вести себя так, как вы только что описали Strings (на самом деле, String реализует Comparable). Второй, Comparator, позволяет сделать то, о чем вы просите. Это можно сделать следующим образом:
Это заставит метод Collections.sort использовать ваш компаратор для механизма сортировки. Если объекты в ArrayList реализуют сравнимость, то вместо этого вы можете сделать что-то вроде этого:
Класс Collections содержит ряд таких полезных и распространенных инструментов.
<Н2>Java 8 лямбда-выражения</Н2>
<Н3 и GT;или</Н3>
С Java 8 вы можете использовать эталонный метод для компаратора:
Поскольку технологии появляются каждый день, ответ будет меняться во времени. Я взглянул на LambdaJ и кажется очень интересным.
Вы можете попробовать решить эти задачи с LambdaJ. Вы можете найти его здесь: http://code.google.com/p/lambdaj/
Вот вам пример:
Сортировка Итерационный
Сортировка с лямда
Конечно, имея такой красоты влияет на производительность (в среднем в 2 раза), но можно найти более читабельный код?
Лучший простой способ с Java 8 для английской алфавитной сортировки
Реализация Класса
**Род *
Если вы хотите отсортировать по алфавиту, который содержит не английские символы, вы можете использовать Локаль... ниже код использовать Турецкий символ рода...
Реализация Класса
**Род *
Функция &ампер; базовый способ
Коллекции
.сорт
метод сортировки "Список" с помощьюкомпаратор
вы проходите. Что компаратор может быть реализован с помощью компаратора в.сравнивая
способ, где можно пройти метод использования как надофункция
. К счастью, фактический код намного проще и короче, чем это описание.Для Java 8:
или
Другой способ
От Java версии 8 и далее мы не'т придется использовать коллекции.сортировать () напрямую.
Список
интерфейс по умолчанию сортировки () метод:См http://visvv.blogspot.in/2016/01/sorting-objects-in-java-8.html.
Java 8 лямбда сокращает сортировки.
Вы можете использовать компаратора фасоли Сортировать по любое свойство в пользовательском классе.
Вы можете попробовать гуава заказ:
Да, что's возможно, например, в этот ответ я Сортировать по недвижимость
В
классаIndexValue
Если вы заметили здесь, я'м создание анонимный внутренний класс ( Что такое Java для укупорочных средств ) и передает его непосредственно на "сортировка" метод класса
массивы
Ваш объект может также реализовать
сопоставимых
( что's что строки и большинство основных библиотек в Java делает), но что бы определить, что "естественный порядок" из класса самостоятельного, а не'т давайте вы подключите новые.Вы можете сортировать с помощью Java 8
Я нашел большинство, если не все эти ответы опираются на базовый класс (объект) для осуществления сопоставимо или есть помощник comparable интерфейс.
Не с моим решением! Следующий код позволяет сравнить объект'с поля, зная его название строку. Вы можете легко изменить его, чтобы не использовать имя, а затем вам нужно выставить его или построить один из объектов, которые вы хотите сравнить против.
Это фрагменты кода могут быть полезны. Если вы хотите отсортировать объект в моем случае я хочу Сортировать по Имя_тома:
Это работает. Я использую это в моей JSP-страницы.
Новый с 1.8-это список.метода sort() вместо использования коллекции.сортировать() так вы напрямую звоните mylistcontainer.сортировать()
Вот фрагмент кода, который демонстрирует список.сортировать() функция:
Плод класс:
Вы можете взглянуть на это представление на Ява форуме в Штутгарте Германия в 2016 году.
Только несколько слайдов использовать немецкий язык, 99% контента является "английский и" в исходный Java-код; как
где OurCustomComparator является использование методов по умолчанию (и другие интересные идеи). Как показано, приводит к очень лаконичный код, чтобы выбрать какой-то метод GET для сортировки и супер простых цепочек (или реверсивный) критериев сортировки.
Если вы находитесь в java8, вы найдете много материала там, чтобы вы начали.