2016-03-16 2 views
0

Для назначения Java мне приходится сортировать по длине ArrayList<String> с использованием интерфейса Comparable.Строка и сравнимый интерфейс

Что я сделал, и это работает, заключается в создании пользовательского объекта в классе, который реализует Comparable и устанавливает CompareTo() для использования длины. Все в порядке, и все работает.

Мне просто интересно, есть ли более простой способ.

Я знаю, что String в Java уже реализует интерфейс Comparable. Но естественный порядок лексикографический или алфавитный, а не по длине. Я понятия не имею, как я могу реализовать различный CompareTo() для экземпляров класса String без необходимости создания моего объекта. Есть ли способ? Или мне не хватает логики?

(я не могу использовать Comparator, я должен использовать интерфейс Comparable.)

+1

Любопытный. Почему вы не могли использовать компаратор? – DeeV

+0

университетское присвоение к сожалению:/ Я тоже этого не понимаю! Весь пример, который я мог найти где с компаратором – jsabina

+1

Это было бы потому, что компаратор является более простым способом, но, похоже, профессор хочет, чтобы вы поняли, как работают надменные и интерфейсы. – DeeV

ответ

1

Это звучит как объекта оболочки это самый простой способ для удовлетворения глупое требование. Просто напишите метод, который сравнивает длины содержащихся строк.

+0

И, возможно, вызывается 'String.compareTo()' когда длины равны? –

+0

@Erick Только если это не указано. – chrylis

4

Я расстраиваюсь с учреждениями, которые обучают их учебную программу смешным и совершенно нереалистичным ограничениям.

Практика, вы собираетесь использовать Comparator<String>, что позволяет вам гибко использовать lambdas для сортировки результатов. Это также невероятно красноречиво.

Принцип, то, что вы описали, является единственным другим логическим подходом. Единственный способ решить эту проблему - создать свой собственный класс, который инкапсулирует нужный вам экземпляр String и сортировать , что.

+0

Я согласен, что они просто создают путаницу в сознании людей, которые только начинают спасибо !!! Большое спасибо за ответы. – jsabina