Java程序对对象进行字母数字排序
请告诉我怎样才能得到预期的结果
预期输出: B2 D1 D2 D14 E2
实际输出: B2 D1 D14 D2 E2
====================================
List<Name> lst = new ArrayList<>();
lst.add(new Name("D",1));
lst.add(new Name("D",14));
lst.add(new Name("D",2));
lst.add(new Name("E",2));
lst.add(new Name("B",2));
Collections.sort(lst, new Comparator<Name>() {
@Override
public int compare(Name n1, Name n2) {
// TODO Auto-generated method stub
String o1=n1.getNm()+n1.getSeatnum();
String o2=n2.getNm()+n2.getSeatnum();
return o1.compareTo(o2);
}
});
for (Name name : lst) {
System.out.println(name.getNm()+name.getSeatnum());
}
=================================
public class Name {
private String nm;
private int seatnum;
public int getSeatnum() {
return seatnum;
}
public void setSeatnum(int seatnum) {
this.seatnum = seatnum;
}
public Name(String nm) {
super();
this.nm = nm;
}
public Name(String nm, int seatnum) {
super();
this.nm = nm;
this.seatnum = seatnum;
}
public String getNm() {
return nm;
}
public void setNm(String nm) {
this.nm = nm;
}
}
最佳答案
是的,这是可能的,但是您的 compare
函数需要首先检查 String
部分是否相等,然后对数字部分使用数值比较(目前,两者都进行比较lexically)。所以,你可以使用类似 -
public int compare(Name n1, Name n2) {
int c = n1.getNm().compareTo(n2.getNm());
if (c != 0) {
return c;
}
return Integer.valueOf(n1.getSeatnum()).compareTo(n2.getSeatnum());
}
或者在 Java 8+ 中使用 Comparator.comparing(Function)
和 Comparator.thenComparing(Function)
喜欢
public int compare(Name n1, Name n2) {
return Comparator.comparing(Name::getNm).thenComparing(Name::getSeatnum)
.compare(n1, n2);
}
关于Java程序以字母数字排序对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26260090/