java - 按姓氏和顺序对行进行排序

标签 java arrays eclipse sorting bluej

好的,到目前为止我有这段代码可以按工作职位排序,现在它还需要按姓氏和字母顺序排序。我设法按职位排序,然后给出平均工资和总工资。

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

public class faculty {

    private static final String ASSISTANT = "assistant";
    private static final String ASSOCIATE = "associate";
    private static final String FULL = "full";

    public static void main(String[] args) {
        FileInputStream filestream;
        BufferedReader reader;
        PrintWriter writer;
        String line;

        double totalAssistant = 0;
        double totalAssociate = 0;
        double totalFull = 0;

        try {
            filestream = new FileInputStream("Faculty List.txt");
            reader = new BufferedReader(new InputStreamReader(filestream));
            writer = new PrintWriter("test.txt");

            List<String> assistantList = new ArrayList<String>();
            List<String> associateList = new ArrayList<String>();
            List<String> fullList = new ArrayList<String>();

            while ((line = reader.readLine()) != null) {

                String[] split = line.split(" ");

                double value = Double.parseDouble(split[split.length - 1]);

                String type = split[split.length - 2];

                if (ASSISTANT.equals(type)) {
                    assistantList.add(line);

                } else if (ASSOCIATE.equals(type)) {
                    totalAssociate += value;
                    associateList.add(line);

                } else if (FULL.equals(type)) {
                    totalFull += value;
                    fullList.add(line);
                }
            }

            writeInFileOutput(writer, totalAssistant, assistantList);
            writeInFileOutput(writer, totalAssociate, associateList);
            writeInFileOutput(writer, totalFull, fullList);

            reader.close();

            writer.close();
        } catch (IOException e) {
            System.out.println(e);

        } finally {
            reader = null;
            filestream = null;
            writer = null;
        }

    }

    private static void writeInFileOutput(PrintWriter writer, double totalSalary, List<String> listLines) {
        for (String assistant : listLines) {
            writer.append(assistant).append("\n");
        }

        writer.append("-------\n");
        writer.append("Total Salary:$").append(String.valueOf(totalSalary)).append("\n");
        writer.append("Average Salary: $")
                        .append(String.valueOf(totalSalary / listLines.size())).append(" \n\n");
    }

}

输出

Pablo Bailey EDUC associate 68757.00
Lonnie Williamson GENS associate 134777.00
Raymond Page EDUC associate 120150.00
Wallace Fitzgerald BUSN associate 40889.00
Juana Robbins SOBL associate 93669.00
Steven Hall SOBL associate 117532.00
Melissa Davis EDUC associate 132186.00
Karla Valdez BUSN associate 16385.00
Melba Luna HLTH associate 70358.00
Sonja Washington HLTH associate 59302.00
Julio Diaz HLTH associate 102641.00
Virgil Briggs PAC associate 40936.00
Terrell Sherman EDUC associate 161595.00
Jorge Scott CSIS associate 124175.00
Tanya Duncan BUSN associate 178894.00
Troy Cannon BUSN associate 58890.00 
------- 
 Total Salary: $3645049.0
 Average Salary: $104144.25714285714 

这就是我当前的输出,它按等级排序。我现在必须添加到列表中,按姓氏在前,然后按名字的字母顺序排序。这只是输出的一小部分示例,因为文本文件很长。 可以将新行添加到输出中。

最佳答案

我会让你的东西更加面向对象。所以这意味着:引入一个新的对象 employee ,它有一些字段,如下例所示:

public class Employee {
    private String firstName;
    private String familyName;
    private String department;
    private Enum jobPosition;
    private double salary;

    // Put constructor and some getters and setters for your field here
}

public enum JobPosition {
    assistant,
    associate,
    full
}

阅读您的输入时,拆分为创建员工所需的字段,并创建 1 个包含所有员工的列表。因为您现在有对象而不是包含一名员工的多个属性的字符串,所以您可以轻松地根据您想要的每个属性对对象进行排序。

关于java - 按姓氏和顺序对行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29935347/

相关文章:

java - 用另一个替换列表中的元素

Javascript - 从数组中删除元素/对数组中高于特定值的元素求和

javascript - 评估 ES6 数组理解字符串

Android - 如何将 HelloWorld 应用程序加载到我的手机上?

java - Braintree 与 Android Eclipse 项目的集成

java - Flowable 中的所有项目都发出后,如何发出最终项目

java - 从数组内的类调用方法

java - Android:无法实例化应用程序

java - Tomcat Maven 插件 - 子容器在启动期间失败

Grails Controller 的 Java 时间转换