当前位置: 首页 > 知识库问答 >
问题:

如何按名字、姓氏等对人员列表进行排序?

年光明
2023-03-14

我提示用户输入他的名字、姓氏和年龄。
我使用确认对话框询问用户是否想添加另一个人,然后我显示他输入的名字。

我如何按名字、第二个名字等对这些人进行分类?

public static void main(String[] args) {

    ArrayList<Person> list = new ArrayList();
    int i = 0;
    while (i == 0) {

        Person p = new Person();

        String fname = JOptionPane.showInputDialog("Enter First Name ");
        String lname = JOptionPane.showInputDialog("Enter Last Name ");
        int Age = Integer.parseInt(JOptionPane.showInputDialog("Enter your Age "));

        p.setfName(fname);
        p.setLname(lname);
        p.setAge(Age);

        list.add(p);


 i=JOptionPane.showConfirmDialog(null, "Are you Want to Add other person","Confirmation",2);

    }

    for (int j = 0; j < list.size(); j++) {
        System.out.print("First name : "+list.get(j).getfName()+"\t Last Name : " + list.get(j).getLname()+"\t Age : "+list.get(j).getAge());
    list.equals(j);

        System.out.print("\n------------------------ \n ");
}

public class Person{

    private String fName;
    private String lname;
    private int age;

    public Person() {

    }

    public Person(String fName, String lname, int age) {
        this.fName = fName;
        this.lname = lname;
        this.age = age;
    }

    public String getfName() {
        return fName;
    }

    public void setfName(String fName) {
        this.fName = fName;
    }

    public String getLname() {
        return lname;
    }

    public void setLname(String lname) {
        this.lname = lname;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }


}

共有3个答案

庄兴发
2023-03-14

连接名称的所有部分并使用它们进行排序。在Person类中实现一个可比较的接口。

public class Person implements Comparable<Person>{
...
    int compareTo(Person o){
         return (fName + lname).compareTo(o.getfName() + o.getLname());
    }
...
}

然后可以将此类对象的列表传递给集合。分类如果您可以访问Person的类代码,最好使用类似的接口。当您使用第三方库并且无法添加新接口的实现时,Distinct comparator非常有用。

夹谷岳
2023-03-14

如果您使用的是Java8,那么可以使用Comparator。比较指定用于比较的方法,然后比较指定在出现平局时使用的方法,依此类推。

Collections.sort(persons, Comparator.comparing(Person::getfName)
                                    .thenComparing(Person::getLname)
                                    .thenComparing(Person::getAge));

或者使用相同的方法将Persona设置为可比较的

public class Person implements Comparable<Person> {

    // ... more code

    @Override
    public int compareTo(Person other) {
        return Comparator.comparing(Person::getfName)
                         .thenComparing(Person::getLname)
                         .thenComparing(Person::getAge)
                         .compare(this, other);
    }

}

田翰林
2023-03-14

有两种方法可以做到这一点,要么让人实现Comparable,要么使用Comparator

使用比较器:

Collections.sort(list, new Comparator() {

    public int compare(Object o1, Object o2) {
        String fn1 = ((Person) o1).getfName();
        String fn2 = ((Person) o2).getfName();

        int res = fn1.compareTo(fn2);
        if (res != 0) {
           return res;
        } else {
           String ln1 = ((Person) o1).getLName();
           String ln2 = ((Person) o2).getLName();
           return ln1.compareTo(ln2);
        }
});

(只需在for循环之前添加此项)

你现在可以自己想办法使用可比性了

 类似资料:
  • 问题内容: 我有一个基于运动的不同类型球员的arrayList。我需要按姓氏对arrayList中的播放器列表进行排序以开始。如果2个玩家的姓氏相同,则需要按名字对这2个玩家进行排序。示例:格式姓氏姓氏Williams Robert Phillips Warren Doe John Phillips Mark 输出应为Doe John Phillips Mark Phillips Warren W

  • 我有一个名为FullName的列的模型联系人,其中包含例如“John Smith”。 如何按全名列中显示的姓氏排序数据? 对于像“John Smith Doe”这样的长名称,我想按“Doe”这个词对数据进行排序。我使用postgres db

  • 我的一个Java类分配要求我对多维字符串数组进行排序。它还需要输入您是想按名字排序还是按姓氏排序。我不太理解这个问题的措辞,也就是主要的排序和粗体部分,所以我会把它贴在这里。 编写一个程序,使用以下标题对二维数组进行排序: 该方法应先对行执行主排序,然后对列执行主排序。 使用以下数据测试您的程序: 您的程序应该询问您是希望数组按名字排序还是按最后一个sName排序。 数组中的行将包含名字。sort

  • 问题内容: 我有一个包含国家/地区名称的对象。如何按字母顺序对列表进行排序? 问题答案: 假设这些是字符串,请使用方便的静态方法sort……

  • 问题内容: 我有一个Java对象列表,希望根据多个字段进行排序。 是否可以使用或接口根据多个字段对列表进行排序?我看到的所有示例仅根据一个领域进行排序。换句话说,可以按“校园”或“教师”或“建筑”进行排序。我想按“校园”,“教师”,“建筑”(因为它在SQL中存在)进行排序 问题答案: 您的比较器如下所示: 基本上,只要到目前为止已比较的属性相等(),它就会继续比较类的每个连续属性。