我需要将对象置于集合中,然后由三个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);
答案 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());
这将根据名称订购您的套装。