2013-04-15 2 views
0

Мне нужно отсортировать пару arraylist на основе другого массива, но на самом деле не знаю, как это сделать. У меня есть расстояние до списка, и я сортирую его с помощью коллекций. который работает отлично, но я хочу отсортировать мой другой список на основе отсортированного списка. Это то, что я сделал до сих порСортировка arraylist a, b, c на основе arraylist d

private void sortList() { 
    List<Float> tempDistance = new ArrayList<Float>(); 
    List<Float> tempmyLat = new ArrayList<Float>(); 
    List<Float> tempmyAlt = new ArrayList<Float>(); 
    List<Float> tempmyLng = new ArrayList<Float>(); 
    ArrayList<HashMap<String, String>> tempplacesListItems = new ArrayList<HashMap<String, String>>(); 

    tempDistance = Distance; 
    tempmyLat = myLat; 
    tempmyLng = myLng; 
    tempmyAlt = myAlt; 
    tempplacesListItems = placesListItems; 

    Collections.sort(tempDistance); 

    for (int i = 0; i < Distance.size(); i++) { 
     Log.d("sorted distance", "" + tempDistance.get(i)); 
     for (int k = 0; k < tempDistance.size(); k++) { 
      if (Distance.get(i) == tempDistance.get(k)) { 
       tempplacesListItems.set(k, placesListItems.get(i)); 
       tempmyLat.set(k, myLat.get(i)); 
       tempmyLng.set(k, myLng.get(i)); 
       tempmyAlt.set(k, myAlt.get(i)); 
      } 
     } 
    } 

    myLat = tempmyLat; 
    myLng = tempmyLng; 
    myAlt = tempmyAlt; 
    placesListItems = tempplacesListItems; 
} 
+0

Что вы имеете в виду «я хочу, чтобы отсортировать его на основе другого списка»? Я думаю, вам нужно уточнить, что вы хотите сделать. Вы хотите сохранить позиционирование индекса в разных списках? Итак, если отсортированный список изменяет индекс объекта, вы хотите, чтобы другой список был отсортирован в один и тот же индекс? –

ответ

2
  1. Поместите все 4 значения в пользовательском классе.
  2. Внедрите интерфейс Comparable для этого класса.
  3. Составьте список объектов этого класса, основываясь на ваших входных списках.
  4. Сортировка списка объектов.

Например:

private void sortList() { 
    List<MyTuple> tuples = new ArrayList<>(); 

    for (int i = 0; i < Distance.size(); i++) { 
     tuples.add(new MyTuple(Distance.get(i), myLat.get(i), 
           myAlt.get(i), myLon.get(i))); 
    } 

    Collections.sort(tuples); 

    // do something with tuples 
} 

private class MyTuple implements Comparable<MyTuple> { 
    private float distance; 
    private float latitude;   
    private float longitude; 
    private float altitude; 

    public MyTuple(float distance, float altitude, 
        float latitude, float longitude) { 
     this.distance = distance; 
     this.latitude = latitude;    
     this.longitude = longitude; 
     this.altitude = altitude; 
    } 

    public int compareTo(MyTuple other) { 
     return Float.compare(this.distance, other.distance); 
    } 
} 
0

вы можете создать новый ComparatorClass, который использует ваш список расстояние

class DistanceBasedComparator<Float> implements Comparator { 
    private List<Float> distances; 

    public DistanceBastedComparator(List distances) { 
     this.distances = distances; 
    } 

    public compare(Float f1, Float f2) { 
     // implement your comparison here 
    } 
} 
[...] 
Comparator comp = new DistanceBaseComparator(tempDistance); 

Arrays.sort(tempMyLat, comp); 
Смежные вопросы