按值排序列表

时间:2012-11-23 10:22:16

标签: java list sorting

我有List<String>List<Integer>。两者都按特​​定顺序(它们是相互关联的)。 List<String>包含名称和List<Integer>其值。

有没有办法按大小排序List<Integer>,还可以更改List<String>的排序,以便值和名称保持关联?

5 个答案:

答案 0 :(得分:15)

您需要java.util.TreeMap<Integer,String>。这是根据其键的自然顺序或在地图创建时提供的Comparator进行排序,具体取决于使用的constructor

答案 1 :(得分:14)

您应该使用List<NameAndValue>而不是两个列表(找到比 NameAndValue 更好的名称,这将反映这些数据实际代表的内容)。 Java是一种OO语言。使用对象。这就是他们的目的:包含相关的数据,并提供方法和封装的行为。

有了这个课程,您就可以按名称,价值或两者对列表进行排序,如果需要,添加额外的字段也不会有问题。

答案 2 :(得分:2)

- 您可以使用java.util.TreeMap<Integer, String>来实现SortedMap。它按密钥的自然排序排序。

- 您还可以使用java.util.Comparator<T>对其进行排序。

答案 3 :(得分:1)

干净代码的角度来看,如果这些属于一起,并且此结构可以在其他地方重复使用,那么您应该创建一个类他们,并使其实现可比较:

public SomeClass implements Comparable<SomeClass> {

    private Integer id;
    private String name;

    private Whatever elseIsNeededHere;

    /* getters'n'setters*/

    // ******** THOU SHALT NEVER FORGET THY FRIENDS, EQUALS AND HASHCODE, OR ELSE THEY TURN TO BE THY FOES ********
    @Override
    public boolean equals(Object other) { //do what it takes }

    @Override
    public int hashCode() { //do what it takes! }

    /* actually implement Comparable */
    @Override 
    public int compareTo(SomeClass o) {
        //null check, and other bloat left out for sake of brevity
        return this.id.compareTo(o.getId());
    }

}

然后,您可以拥有一个包含所属内容的列表,并对其进行排序非常

ArrayList<SomeClass> myList = getMyData();
Collections.sort(myList);

myList列表实例按您想要的方式排序。

如果您需要不同的比较方法,可以使用另一种方式,使用Comparators

Collections.sort(myList,new Comparator<SomeClass>() { 
    public int compare(SomeClass a, SomeClass b) { // do what it takes }
    });

答案 4 :(得分:0)

你可以试试这个:

创建一个自定义Comprator类,如:

import java.util.Comparator;

/**
 * Created by Maddy Sharma on 7/17/2015.
 * Contains sorting logic to sort Dialogs by its date(long)
 */
public class DateDialogComparator implements Comparator<UserChatDialog>{

// lhs.getLastMessageDateSent() is the long value

    @Override
    public int compare(UserChatDialog lhs, UserChatDialog rhs) {
    // This line will work in java 7 and Android API Level 19
    //    return Long.compare(lhs.getLastMessageDateSent(), rhs.getLastMessageDateSent());


                              'OR'


        if(lhs.getLastMessageDateSent()>rhs.getLastMessageDateSent())
            return -1;
        else if(lhs.getLastMessageDateSent()<rhs.getLastMessageDateSent())
            return +1;
        return 0;
    }
}

从活动或片段中调用它:

ArrayList<UserChatDialog> myList = userChatDialogList;
Collections.sort(myList, new DateDialogComparator());
Log.i("List after sorting is:", "" + userChatDialogList);