Java程序以字母数字排序对象

标签 java algorithm

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/

相关文章:

java - 在 Eclipse Indigo Service Release 2 中导入 slidingmenu 库

java - java中的Map.compute函数

c++ - C++中最长的非重复子串

algorithm - 如何找到单链表的交集

algorithm - 迷宫求解最优禁止左转算法

algorithm - 查找重叠项目的所有唯一组合?

java - ttyS0 未显示在终端上

java - 何时检查空值?

java - Java REST 服务的生命周期和初始化

java - 需要帮助来创建算法,根据人们的意见将他们分组