在Java中按姓氏和名对对象的ArrayList进行排序
我有一个基于体育的不同类型球员的列表。首先,我需要按姓氏对arrayList中的玩家列表进行排序。如果两名玩家的姓氏相同,则需要按名字对这两名玩家进行排序。 示例:格式化Lastname firstname 威廉姆斯·罗伯特 菲利普斯·沃伦 多伊·约翰 菲利普斯马克 输出应该是 多伊·约翰 菲利普斯马克 菲利普斯·沃伦 威廉姆斯·罗伯特 我现在所拥有的只是按照代码中的第一台或最后一台atm进行排序在Java中按姓氏和名对对象的ArrayList进行排序,java,Java,我有一个基于体育的不同类型球员的列表。首先,我需要按姓氏对arrayList中的玩家列表进行排序。如果两名玩家的姓氏相同,则需要按名字对这两名玩家进行排序。 示例:格式化Lastname firstname 威廉姆斯·罗伯特 菲利普斯·沃伦 多伊·约翰 菲利普斯马克 输出应该是 多伊·约翰 菲利普斯马克 菲利普斯·沃伦 威廉姆斯·罗伯特 我现在所拥有的只是按照代码中的第一台或最后一台atm进行排序 public static void sortPlayers(ArrayList playe
public static void sortPlayers(ArrayList playerList) {
for (int i = 0; i < playerList.size(); i++) {
for (int j = 0; j < playerList.size(); j++) {
Collections.sort(playerList, new Comparator() {
public int compare(Object o1, Object o2) {
PlayerStats p1 = (PlayerStats) o1;
PlayerStats p2 = (PlayerStats) o2;
return p1.getPlayerLastName().compareToIgnoreCase(p2.getPlayerLastName());
}
});
}
}
}
publicstaticvoidsortplayers(arraylistplayerlist){
对于(int i=0;i
将比较器更改为:
public int compare(Object o1, Object o2) {
PlayerStats p1 = (PlayerStats) o1;
PlayerStats p2 = (PlayerStats) o2;
int res = p1.getPlayerLastName().compareToIgnoreCase(p2.getPlayerLastName());
if (res != 0)
return res;
return p1.getPlayerFirstName().compareToIgnoreCase(p2.getPlayerFirstName())
}
佩塔的回答是正确的,只有两点:
- 使用
而不是List
作为方法参数,因为该接口更通用,即使您稍后更改为另一个ArrayList
类型(如List
…),该方法也会工作LinkedList
- 使用泛型使代码更加类型安全
//the place where you define the List
List<PlayerStats> playerList = new ArrayList<PlayerStats>();
public static void sortPlayers(List<PlayerStats> playerList) {
Collections.sort(playerList, new Comparator<PlayerStats>() {
public int compare(PlayerStats p1, PlayerStats p2) {
int res = p1.getPlayerLastName().compareToIgnoreCase(p2.getPlayerLastName());
if (res != 0)
return res;
return p1.getPlayerFirstName().compareToIgnoreCase(p2.getPlayerFirstName())
}
});
}
//定义列表的位置
List playerList=new ArrayList();
公共静态无效排序层(列表播放列表){
Collections.sort(playerList,newcomparator(){
公共整数比较(PlayerStats p1,PlayerStats p2){
int res=p1.getPlayerLastName().compareToIgnoreCase(p2.getPlayerLastName());
如果(res!=0)
返回res;
返回p1.getPlayerFirstName().compareToIgnoreCase(p2.getPlayerFirstName())
}
});
}
使用java8有一种简单的方法:
public List<PlayerStats> getSortedPlayerList(List<PlayerStats> playerList) {
return playerList.stream().sorted(Comparator.comparing(PlayerStats::getPlayerLastName).thenComparing(PlayerStats::getPlayerFirstName)).collect(Collectors.toList());
}
public List getSortedPlayerList(List playerList){
返回playerList.stream().sorted(Comparator.comparing(PlayerStats::getPlayerLastName)。然后返回comparing(PlayerStats::getPlayerFirstName)).collect(collector.toList());
}
//需要java@8
//类Person{String fName;String lName;int id}
列表=新的ArrayList();
人员p1=新人员();
p1.设定名称(“a”);
p1.设定名称(“x”);
列表。添加(p1);
人员p4=新人员();
p4.设定名称(“b”);
p4.设定名称(“z”);
列表。添加(p4);
人员p3=新人员();
p3.设定名称(“a”);
p3.设定名称(“z”);
列表。添加(p3);
人员p2=新人员();
p2.设定名称(“a”);
p2.设定名称(“y”);
列表。添加(p2);
//按单个字段排序
Collections.sort(list,(o1,o2)->o1.getfName().compareTo(o2.getfName());
//按多个级联比较器排序。
Collections.sort(list,Comparator.comparing(Person::getfName)。然后比较(Person::getlName));
list.forEach(System.out::println);
//输出
//Person[fName=a,lName=x,id=null]
//Person[fName=a,lName=y,id=null]
//Person[fName=a,lName=z,id=null]
//Person[fName=b,lName=z,id=null]
另外,要去掉嵌套循环。Collections.sort为您完成所有工作
//requires java@8
//class Person { String fName; String lName; int id}
List<Person> list = new ArrayList<>();
Person p1 = new Person();
p1.setfName("a");
p1.setlName("x");
list.add(p1 );
Person p4 = new Person();
p4.setfName("b");
p4.setlName("z");
list.add(p4);
Person p3 = new Person();
p3.setfName("a");
p3.setlName("z");
list.add(p3);
Person p2 = new Person();
p2.setfName("a");
p2.setlName("y");
list.add(p2);
//sort by a single field
Collections.sort(list, (o1,o2) -> o1.getfName().compareTo(o2.getfName()));
//sort by multiple cascading comparator.
Collections.sort(list, Comparator.comparing(Person::getfName).thenComparing(Person::getlName));
list.forEach( System.out::println);
//output
//Person [fName=a, lName=x, id=null]
//Person [fName=a, lName=y, id=null]
//Person [fName=a, lName=z, id=null]
//Person [fName=b, lName=z, id=null]