Массив вида сначала длиной затем в алфавитном порядке в Java

Как я могу отсортировать массив сначала по длине затем в алфавитном порядке?

У меня есть список вещей с числами на них, и я в настоящее время добираюсь:

Something1 Something10 Something2 Something3

Принимая во внимание, что я хочу добраться:

Something1 Something2 Something3 Something10

9
задан Brian 4 August 2010 в 19:12
поделиться

4 ответа

public class MyComparator implements Comparator<String>{
    @Override
    public int compare(String o1, String o2) {  
      if (o1.length() > o2.length()) {
         return 1;
      } else if (o1.length() < o2.length()) {
         return -1;
      }
      return o1.compareTo(o2);
    }
}

Затем используйте:

Collections.sort(yourList, new MyComparator());
24
ответ дан 4 December 2019 в 06:29
поделиться

Создайте компаратор, который сначала сравнивает по длине и, если длины одинаковы, использует String.compareTo ().

4
ответ дан 4 December 2019 в 06:29
поделиться

Сортировка сначала по длине, а затем лексически будет работать ТОЛЬКО, если префиксы строки (т.е. часть перед числом ) имеет одинаковую длину во всех случаях. Я считаю, что вы действительно можете захотеть написать компаратор, который разделяет строковую и числовую части и сортирует в алфавитном порядке по строке и численно по числовой части.

1
ответ дан 4 December 2019 в 06:29
поделиться

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

Для этого класса вам необходимо определить интерфейс Comparable и поместить логику для сравнения в его абстрактный метод.

int compareTo(T o)  

Например:

class MyString extends String
{
  @Override
  int compareTo(Object obj)
  {
    // put your logic in here. 
    // Return -1 if this is "less than" obj. 
    // Return 0 if this is equal to obj
    // Return 1 if this is "greater than" obj.

    // Test length first
    if (length() < obj.length())
      return -1;
    if (length() > obj.length())
      return 1;

    // Lengths are the same, use the alphabetical compare defined by String already
    return super.compareTo(obj);
   }
}

Заявление об отказе от ответственности, я на самом деле не тестировал этот код, но он должен быть близок к тому, что вы хотите.

0
ответ дан 4 December 2019 в 06:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: