gpt4 book ai didi

java - 按对象属性对对象的 ArrayList 进行排序并组织它们

转载 作者:行者123 更新时间:2023-12-01 12:47:37 25 4
gpt4 key购买 nike

我正在编写一个Java应用程序,它应该读取一个输入文件,每行都有记录,并且字段以逗号分隔。应用程序的输出应在标准输出上,格式如下:

Age1
Sex1
name1
name2
Sex2
name3
name4
e.g
33
Female
Jayanta
Kanupriya
44
Female
Lajjo
Rajjo
Male
Raghav
Sitaram

等等......

我创建了一个 Person 类来保存数据,并实现了 Comparable 接口(interface),其中的compareTo 接口(interface)对年龄进行初级排序,对性别进行二级排序。我可以稍后对名称添加三级排序。

public class Person implements Comparable<Person>{

private String name;
private int age;
private String sex;

/**
* @param age, sex and name
*/
public Person(String name, int age, String sex) {
this.setName(name);
this.setAge(age);
this.setSex(sex);

}

//getters and setters

@Override
public int compareTo(Person person) {
return this.age < person.getAge()?-1:this.age > person.getAge()?1:sortOnGender(person);
}

public int sortOnGender(Person person) {
if (this.sex.compareToIgnoreCase(person.getSex()) < 0) {
return -1;
}
else if (this.sex.compareToIgnoreCase(person.getSex()) > 0) {
return 1;
}
else {
return 0;
}
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(String.valueOf(this.age)).append('-').append(this.sex).append('-').append(this.name);
return sb.toString();
}
}

接下来,在 App 类的 main 方法中,我创建了 Persons 的 ArrayList 并填充了数据并使用 Collections.sort() 进行排序。我打印了 ArrayList 并按排序顺序排列。然而问题是如何获取所需格式的数据。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;

public class App {

//An array of persons
private static List<Person> persons = new ArrayList<Person>();

public static void main(String[] args) {

File inputfile = new File(args[0]);

if(inputfile.exists()) {
String line;
BufferedReader br;
StringTokenizer st = null;
try {
br = new BufferedReader(new FileReader(inputfile));
// Read comma seperated file line by line
while((line = br.readLine()) != null) {

//Break the line using "," as field seperator
st = new StringTokenizer(line, ",");

// Number of columns in the line
int numcols = st.countTokens();

if(numcols > 0) {
String[] cols = new String[st.countTokens()];

// Till the time columns are there in the line
while(st.hasMoreTokens()) {
for(int i=0; i < numcols; i++) {
cols[i] = st.nextToken();
}
}

// If there are elements in the cols array
if(cols.length !=0) {
// Create a list of persons
persons.add(new Person(cols[0].trim(), Integer.parseInt(cols[1].toString().trim()), cols[2].trim()));
}
}
else {
// Print error and continue to next record (Takes care of blank lines)
System.err.println("Error: No columns found in line");
}
}
// Sort the Collection
Collections.sort(persons);
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}

}
else {
System.out.println("Specify the location of the input file");
}

System.out.println(persons);

}
}

最佳答案

我不确定我是否明白你的意思,但你只需要编写一个可以按你想要的方式显示的方法!

如果您想在控制台中打印,您可以尝试以下操作:

Public printListPersons(persons[] p){
for(Person p : persons){
System.out.println(p[i].getAge);
System.out.println("\n");
System.out.println("\t" + p[i].getSex);
....
}
}

关于java - 按对象属性对对象的 ArrayList 进行排序并组织它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24534142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com