gpt4 book ai didi

java - 写入txt文件时按升序排序

转载 作者:行者123 更新时间:2023-12-02 02:09:26 27 4
gpt4 key购买 nike

我想写入一个文本文件(我已经管理过)。不过,我想按年龄排序。

我的两个类是 Person 和 List。

我已经实现了类似的接口(interface),如下

public class Person implements Comparable <Person> 

public int compareTo(Person compareAge)
{


return (this.getAge()- compareAge.getAge());
}

在同一个类中,我有一个 toString() 方法,它打印姓名和年龄,例如大卫 49 岁。

我已经在列表类中实现了 writePerson() 方法,但我很难让它按年龄排序。

这是我所拥有的...

public void writePerson()
{

File file = new File("the link to my extensions// personlist.txt);
BufferedWriter bufferedFileWriter = null;

try
{
bufferedFileWriter = new BufferedWriter(new FileWriter(payrollFile));
for (Person a : persons)
{
a.compareTo(a);
bufferedFileWriter.write (a.toString());
bufferedFileWriter.newLine();
}
}
catch (Exception anException)
{
System.out.println("Error: " + anException);
}
finally
{
try
{
bufferedFileWriter.close();
}
catch (Exception anException)
{
System.out.println("Error: " + anException);
}
}
}

这仅打印名称,没有任何顺序

最佳答案

a.compareTo(a); -> 在这里比较这两个而不对结果执行任何操作。这个compareTo方法只返回一个int值,表示一个值是否大于另一个值。在你的例子中,你将 A 与 A 进行比较,所以你总是得到 0。

您需要使用该比较器对集合进行排序。 Java 有一个很好的排序方法,它获取可比较项列表并对它们进行排序。您可以尝试:

   Collections.sort(persons);
for (Person a : persons)
{
bufferedFileWriter.write (a.toString());
bufferedFileWriter.newLine();
}

它会使人的集合排序。如果您想在之后获得其初始状态,可以在排序之前将其复制到新集合中。

另一种方法是通过流 api,如下所示:

 for (Person a : list.stream().sorted((p1, p2)->p1.
compareTo(p2)).
collect(Collectors.toList()))
{
bufferedFileWriter.write (a.toString());
bufferedFileWriter.newLine();
}

如果这会导致内存问题,因为两种解决方案都会在内存中复制排序后的数组,那么您可以执行诸如搜索列表之类的操作 - 例如两个嵌套循环或其他操作,但在我看来这是一种矫枉过正

关于java - 写入txt文件时按升序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50233676/

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