简体   繁体   English

根据arraylist d对arraylist a,b,c进行排序

[英]Sort arraylist a,b,c based on arraylist d

I need to sort a couple of arraylist based on another array but don't really know how to go about it.I have the list distance and i sort it using collections. 我需要根据另一个数组对几个arraylist进行排序,但实际上并不知道该怎么做。我有列表距离,我使用集合对它进行排序。 that works perfectly but i want to sort my other list based on the sorted list. 这是完美的,但我想根据排序列表排序我的其他列表。 This is what i have done so far 这就是我到目前为止所做的

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;
}
  1. Put all 4 values in a custom class. 将所有4个值放在自定义类中。
  2. Implement the Comparable interface for that class. 为该类实现Comparable接口。
  3. Make a list of objects of that class, based on you input lists. 根据您的输入列表创建该类的对象列表。
  4. Sort the object list. 对对象列表排序。

For example: 例如:

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);
    }
}

you could create a new ComparatorClass that uses your distance list 您可以创建一个使用距离列表的新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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM