Сортировка объекта java на основе элемента string

#java #sorting

#java #сортировка

Вопрос:

У меня есть объект пользовательского типа с именем Suffix , который определяется как

 class Suffix
{
      int index;
      String suff;
}
  

Я создаю массив объектов типа suffix

 Suffix s[] = new Suffix[10];
  

Мне нужно отсортировать его в соответствии со строковым suff элементом данных. Как я могу это сделать? Я не могу понять большинство пользовательских реализаций, доступных онлайн.

например: если у меня есть s [0].suff = «шляпы», s[1].suff = «ats», s[2].suff =»ts». Теперь мне нужно отсортировать этот массив на основе суффикса. ("ats",1) , ("hats",0) and ("ts",2) должен быть порядок сортировки.

Комментарии:

1. I need to sort it according to the string suff data member. ?? Пожалуйста, пример.

Ответ №1:

Вы можете использовать Arrays.sort(..), если ваш объект расширяет сопоставимый интерфейс.

 class Suffix implements Comparable<Suffix>
{
   int index;
   String suff;

  @Override
  public int compareTo(Suffix o) {

     return this.suff.compareTo(o.suff);
  }
}
  

Теперь вы можете использовать, как показано ниже

 Suffix s[] = new Suffix[10];
Arrays.sort(s);
  

Комментарии:

1. implements Comparable<Suffix> должно быть безопаснее 😉

Ответ №2:

У вас есть три возможности:

  1. Напишите свой собственный алгоритм сортировки и сравните suff строку там.

  2. Реализует Comparable<> интерфейс в вашем Suffix классе, переопределите comparteTo() метод и используйте Arrays.sort(); , который принимает массив сравниваемых объектов в качестве параметра.

  3. Введите a Comparator<> и используйте Arrays.sort() метод, который принимает массив и компаратор.

У третьего способа есть одно преимущество. Если вы хотите выполнить сортировку по index вместо suff параметра, вы можете передать sort() методу другой компаратор.

         Suffix s[] = new Suffix[10];

        Comparator comp = new Comparator<Suffix>(){

            @Override
            public int compare(Suffix arg0, Suffix arg1)
            {
                return arg0.suff.compareTo(arg1.suff);
            }
        };

        Arrays.sort(s,comp);
  

Вам нечего менять в вашем Suffix классе. Подсказка: Вы можете создать дополнительный класс с вашими компараторами в виде статических полей.

Ответ №3:

Помимо использования Comparable, как сказали @insert-username-here и @vinayknl, в другом используется Comparator . Внутри метода, который вы хотите отсортировать, добавьте следующее:

 Comparator comparator = new Comparator<Suffix>() {

    public int compare(Object o1, Object o2) {
        Suffix s1 = (Suffix) o1;
        Suffix s2 = (Suffix) o2; 
        return s1.getSuff().compareTo(s2.getSuff());
    }
}
Array.sort(s, comparator);
  

Примечание: не забудьте добавить getter.

Ответ №4:

Ознакомьтесь с сопоставимым интерфейсом. Этот интерфейс позволит сравнивать ваши классы в соответствии с вашими собственными критериями.

Быстрый поиск в Google выдал эту полезную страницу.