5

我有一个List<String>和一个List<Integer>。两者都有特定的顺序(它们是链接的)。List<String>包含名称List<Integer>及其值。

有没有办法List<Integer>按大小排序,但也可以更改排序,List<String>以便值和名称保持链接?

4

5 回答 5

15

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

于 2012-11-23T10:24:24.400 回答
14

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

一旦你有了这个类,你就可以按名称、值或两者对列表进行排序,如果需要,添加一个额外的字段不会有问题。

于 2012-11-23T10:24:49.423 回答
2

-您可以使用java.util.TreeMap<Integer, String>which 实现SortedMap. 它按 key 的自然顺序排序

-你也可以用java.util.Comparator<T>它来整理它。

于 2012-11-23T10:27:34.847 回答
1

干净的代码的角度来看,如果它们属于一起,并且这个结构可以在其他地方重用,你应该用它们创建一个类,并让它实现 Comparable :

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 }
    });
于 2012-11-23T10:37:55.470 回答
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);
于 2015-07-17T10:36:00.033 回答