我正在写一个Java的应用程序,它应该读取每行记录的输入文件,字段由逗号分隔。应用程序的输出应在stdout上,格式如下:
Age1
Sex1
name1
name2
Sex2
name3
name4
e.g
33
Female
Jayanta
Kanupriya
44
Female
Lajjo
Rajjo
Male
Raghav
Sitaram
等等
我创建了一个类Person来保存数据,并实现了可比接口,该接口对年龄进行主要排序,对性别进行次要排序。我可以稍后在名称上添加三级排序。
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();
}
}
接下来,在main方法的App类中,我创建了一个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);
}
}
一旦你有了一个排序列表,你应该能够做这样的事情
int currentAge = -1;
String currentSex = null;
for (Person person : persons) {
if (person.getAge() != currentAge) {
currentAge = person.getAge();
currentSex = null;
System.out.println(person.getAge());
}
if (!person.getSex().equals(currentSex)) {
currentSex = person.getSex();
System.out.println("\t" + person.getSex());
}
System.out.println("\t\t" + person.getName());
}
我不确定我是否理解您的意思,但您只需编写一个方法,该方法将根据您的需要显示!
如果您想在控制台中打印,您可以尝试以下方法:
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);
....
}
}
我读过关于使用比较器对数组列表进行排序的文章,但在所有示例中,人们都使用了,根据一些研究,这是一种用于字符串的方法。 我希望按照自定义对象的属性之一对其ArrayList进行排序:日期对象()。通常我会通过来比较它们,所以我想知道我是否可以写出如下内容:
问题内容: 我需要通过对象属性之一的一个属性比较对象数组。 我在做 : 它没有编译,有人知道怎么做吗? 谢谢。 问题答案: 这是代码中导致错误的部分 您可以创建对特定类型的任意对象的(静态或非静态)方法的引用。对任何类型的对象的方法的引用如下所示: 但是方法引用不是对象,并且没有成员可以访问。使用此代码,您尝试访问引用的成员变量(并且不能) 另外,方法引用不是类,因此您不能从它们中获取另一个方法引
问题内容: 在Swift 2.0中,您将如何按属性对自定义对象数组进行排序?我知道在Swift 1.2中,这是使用sorted()和sort()完成的。但是,这些方法在Xcode 7 beta 4中不再起作用。谢谢! 例如: 问题答案: 在Swift 2中: 您可以使用方法,使用来比较两个日期: 或者,如果您想对原始数组进行排序,则可以: 在Swift 3中 返回数组的排序形式,请使用,而不是 排
问题内容: 我已经使用AJAX获得了以下对象并将它们存储在数组中: 如何仅使用JavaScript 创建一个函数以按属性 升序 或 降序 对对象进行排序? 问题答案: 按价格升序对房屋进行排序: 或在ES6版本之后:
我有一个JavaScript对象数组: 如何在JavaScript中按照的值对它们进行排序? 我知道,但它似乎只适用于字符串和数字。是否需要向对象添加方法?
假设我有一个由几个对象组成的数组: 我如何按日期元素对这个数组进行排序,从最接近当前日期的日期开始,然后按时间向下排序?请记住,数组可能有许多对象,但为了简单起见,我使用了2。 我会使用排序函数和自定义比较器吗?