收藏和比较

时间:2015-11-08 17:03:57

标签: java

我需要将对象置于集合中,然后由三个Comparators对它们进行排序。 因此,排序集合必须传递变量。 什么样的系列可供选择?如何实现呢?

ArrayList<User> list2 =   Collections.sort(list , new NameComparator());

所以这是不可能的。我可以使用TreeSet或ArrayList吗?

public class User  {
private String name;
private String surname;
private String login;
}

public class NameComparator implements Comparator<User>{

public int compare(User a, User b){

    return a.getName().compareTo(b.getName());
}
}

public class SurnameComparator implements Comparator<User>{

public int compare(User a, User b){

    return a.getSurname().compareTo(b.getSurname());
}
}

public class LoginComparator implements Comparator<User>{

public int compare(User a, User b){

    return a.getLogin().compareTo(b.getLogin());
}
}

怎么做?

    TreeSet set1= new TreeSet<User>(new NameComparator());

    set1.add(new User("RRRR","TTTT","KK"));
    set1.add(new User("AAA","EEEEE","QQQQ"));
    set1.add(new User("GGGG","BBBBB","ssss"));
    set1.add(new User("BBBB","BBBBF","AAAA"));

    System.out.println(set1);

    TreeSet set2= new TreeSet<User>( new LoginComparator());
    set2=set1;
    System.out.println(set2);

2 个答案:

答案 0 :(得分:1)

您可以使用ArrayList集合,但每次插入后元素都不会自动排序(除非您再次调用显式排序)。要实现这一点,您必须使用TreeSet(或ConcurrentSkipListSet)。

要使用ArrayList,您只需执行以下操作:

ArrayList<User> myList = new ArrayList<>();
myList.add(new User());
myList.add(new User());
myList.add(new User());
// Add your elements.

Collections.sort(myList , new LoginComparator());
Collections.sort(myList , new SurnameComparator());
Collections.sort(myList , new NameComparator());

还要考虑方法Collections.sort(...) 返回新实例,它是 void 方法。在第一行中,您将sort的结果分配给新的ArrayList。

答案 1 :(得分:0)

您可以使用TreeSet集合。 创建TreeSet时只需传递你想要的Comparator类。

例如:Set<User> userSet=new TreeSet<User>(new NameComparator());

这将根据名称订购您的套装。