2016-10-17 2 views
-1

привет у меня есть 2 строки массиваСортировка на основе предыдущей сортировки массива андроида Java

private String names[] = { 
    "Drinks", 
    "Bikes", 
    "Cars"}; 

private String desc[] = { 
    "this is drinks package", 
    "package for bikes", 
    "package cars"}; 

// now i used 
Arrays.sort(names); 

Теперь имена в правильном A - порядка Z, как я могу сортировать «по убыванию» массив на основе «имен "массив? Например, после сортировки массива «имен» Результат:

Bikes,Cars,Drinks 

теперь я хочу массив убывания форматировать так же, так что собственно «DESC» лежит на соответствующих «имена». Результат должен быть таким:

names = "Bikes,Cars,Drinks" 
desc = "package for bikes","package cars,this is drinks package" 

можем ли мы это сделать?

Отмеченный дублируется это не дублировать нисходящих все равно

+1

Возможный дубликат (http://stackoverflow.com/questions/1694751/java-array-sort-descending) – ChrisStillwell

+0

пакет автомобиль будет представлен [Java Массив Сортировать по убыванию?] пакет для велосипедов. если вы хотите сделать что-то вроде строковой строки, используйте двумерные массивы или KeyValuePair –

+0

жаль, что вы ошибаетесь, это не дубликат того, что я не хочу сортировать desc. но на основе массива 1 – AndroidGuy007

ответ

1

Почему бы не использовать классы?

Как и в случае Object-Oriented Principles, когда у вас есть данные, относящиеся к определенной теме, вы помещаете их в класс вместе.

Пример:

NameDescription класс, реализующий Comparable interface

public class NameDescription implements Comparable<NameDescription> { 
    private String name; 
    private String description; 

    public NameDescription(String name, String description) { 
     this.name = name; 
     this.description = description; 
    } 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getDescription() { 
     return description; 
    } 
    public void setDescription(String description) { 
     this.description = description; 
    } 

    @Override 
    public int compareTo(NameDescription o) { 
     return name.compareTo(o.getName()); 
    } 
} 

Сопоставимые интерфейс предоставляет метод CompareTo, который делает вас в состоянии определить формулу сравнения сравнить текущий объект с другим (они даже не должны быть одного типа). Метод Arrays.sort использует метод compareTo для сортировки элементов, поэтому таким образом вы объединяете свои данные, и любой метод сортировки даст вам последовательные результаты, основанные на методе compareTo.

сортировщик класс:

public class Sorter { 

    public static void main(String[] args) { 
     NameDescription namesDescriptions[] = { 
       new NameDescription("Drinks", "this is drinks package"), 
       new NameDescription("Bikes", "package for bikes"), 
       new NameDescription("Cars", "package cars"), 
      }; 

     Arrays.sort(namesDescriptions); 

     // ASCENDING 
     for(int i=0; i<namesDescriptions.length; i++) { 
      System.out.println(namesDescriptions[i].getName()); 
     } 
     for(int i=0; i<namesDescriptions.length; i++) { 
      System.out.println(namesDescriptions[i].getDescription()); 
     } 

     System.out.println("---------"); 

     // DESCENDING 
     for(int i=namesDescriptions.length-1; i>=0; i--) { 
      System.out.println(namesDescriptions[i].getName()); 
     } 
     for(int i=namesDescriptions.length-1; i>=0; i--) { 
      System.out.println(namesDescriptions[i].getDescription()); 
     } 

     // To save them in separate arrays 
     String[] names = new String[namesDescriptions.length]; 
     String[] desc = new String[namesDescriptions.length]; 
     String[] imageid = new String[namesDescriptions.length]; 
     for(int i=0; i<namesDescriptions.length; i++) { 
      names[i] = namesDescriptions[namesDescriptions.length-i-1].getName(); 
      desc[i] = namesDescriptions[namesDescriptions.length-i-1].getDescription(); 
      imageid[i] = namesDescriptions[namesDescriptions.length-i-1].getimg(); 
     } 
    } 

} 
+0

спасибо, что работает как ожидалось, я только что изменил с помощью listview, помеченный как ответ – AndroidGuy007

+0

Спасибо! Я только что обновил его, чтобы работать именно так, как вы хотели. :) –

+0

привет, у меня есть вопрос, мы можем использовать для цикла что-то вроде этого для (int i = 0; i AndroidGuy007

1

Ваша цель состоит в том, чтобы связать ключ (Имена массива) к значению (массив Descr).

Вы можете достичь двумя способами:

Использовать двумерный массив:

String[][] myItems = new String[][] { 
    {"Drinks", "This is drink package"}, 
    {"Cars", "package cars"}, 
    {"Bikes", "package for bikes"}, 
    ... 
}; 

Теперь вы можете сортировать его following this example или любой другой еще

Использование AbstractMap.SimpleEntry

С этим вам просто нужно создать одномерный массив AbstractMap.SimpleEntry<String, String> и заказать его. вы можете следить за документацией, связанной с этой целью.

Надеется, что это помогло

ПРИМЕЧАНИЯ

Если нет никакой логики между двумя массивами, вы не можете связать их. в вашем примере это можно сделать, выполнив поиск во втором массиве ключевых слов первого массива, но так как вы ничего не сказали о «must have» для массива desc, мы должны предположить, что запись «kid» может быть связанным с «baby package» descr, поэтому вы не можете найти его, выполнив поиск «kid». Надеюсь, я объяснил неплохим образом

+0

, это действительно работает, но мой пользовательский listview запутался в том, что я создал два разных текстовых поля в макете, один для заголовка и один для описания теперь, когда я отправляю этот CustomList customList = новый CustomList (это, имена, desc); а позже текст устанавливается таким образом textViewName.setText (имена [позиция]); textViewDesc.setText (desc [position]); и это становится испорченным любым простым подходом, что-то вроде, если мы можем получить позицию счета при сортировке первого массива и использовать один и тот же счетчик для сортировки второго? – AndroidGuy007

Смежные вопросы