我提示用户输入他的名字、姓氏和年龄。
我使用确认对话框询问用户是否想添加另一个人,然后我显示他输入的名字。
我如何按名字、第二个名字等对这些人进行分类?
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;
}
}
连接名称的所有部分并使用它们进行排序。在Person类中实现一个可比较的接口。
public class Person implements Comparable<Person>{
...
int compareTo(Person o){
return (fName + lname).compareTo(o.getfName() + o.getLname());
}
...
}
然后可以将此类对象的列表传递给集合。分类如果您可以访问Person的类代码,最好使用类似的接口。当您使用第三方库并且无法添加新接口的实现时,Distinct comparator非常有用。
如果您使用的是Java8,那么可以使用Comparator。比较
指定用于比较的方法,然后比较指定在出现平局时使用的方法,依此类推。
Collections.sort(persons, Comparator.comparing(Person::getfName)
.thenComparing(Person::getLname)
.thenComparing(Person::getAge));
或者使用相同的方法将Person
a设置为可比较的
:
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);
}
}
有两种方法可以做到这一点,要么让人实现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中存在)进行排序 问题答案: 您的比较器如下所示: 基本上,只要到目前为止已比较的属性相等(),它就会继续比较类的每个连续属性。