【问题标题】:Sorting BufferedWriter string output by distinct value in java在java中按不同的值对BufferedWriter字符串输出进行排序
【发布时间】:2019-02-04 10:41:23
【问题描述】:

我有这个功能:

它得到了我想要的所有数据,但我需要按工作时间对输出进行排序。我不知道如何对我得到的数据进行排序。

感谢任何提示。

raportBtn.setOnAction(event -> {

      Writer writer=null;
      try {
          File file = new File("C:/user/raport.txt");
          writer = new BufferedWriter(new FileWriter(file));
          for(Employee emp:listOfEmployees){
              String text = emp.getName() + " " + emp.getSurname()+ " " + emp.getRoom() + " " + emp.getWorkStart() + " " + emp.getWorkEnd() + " " + emp.getWorkTime() + "\n";
              writer.write(text);
          }
      } catch (IOException e) {
          e.printStackTrace();
      } finally{
          {
              try{
                  writer.flush();
              }catch(IOException e){
                  e.printStackTrace();
              }
              try{
                  writer.close();
              }catch(IOException e){
                  e.printStackTrace();
              }
          }
      }
  });

【问题讨论】:

  • 这与fx无关,不是吗?在写入文件之前对列表进行排序,看看 Collections.sort (你需要一个比较器)
  • 和javafx有关,因为数据是table view。我对集合进行了修复,但随后它也对我的 tableView 进行了排序。我只想对输出进行排序。

标签: java sorting bufferedwriter


【解决方案1】:

您需要做的就是实现一个比较器。假设您想按年龄(升序)对列表进行排序。那么:

import java.util.Comparator;
public class EmployeesComparator implements Comparator<Employee> {

  @Override
  public int compare(Employee o1, Employee o2) {
    return o1.age - o2.age;
  }
}

然后,你可以这样使用它:

Collections.sort(listOfEmployees, new EmployeesComparator());

希望有帮助!

【讨论】:

  • 它有效,但当我按下 raportBtn 时,它也会对我的表格视图的内容进行排序。有没有办法将排序仅连接到 writer.write(text) @Anastasios Moraitis?
  • @PawełKumanowski 是的,如果您将列表复制到临时列表。当然有更好的方法可以做到这一点,但这是我的第一个想法。 List&lt;Employee&gt; temp = listOfEmployees; Collections.sort(temp, new EmployeesComparator());
猜你喜欢
  • 1970-01-01
  • 2014-10-28
  • 2015-02-09
  • 2012-10-14
  • 2015-10-16
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多