【问题标题】:Compare column of csv in java比较java中csv的列
【发布时间】:2017-03-23 12:11:22
【问题描述】:

我正在使用我的“CsvReader”读取一个 csv 文件,如下所示:

public class CsvReader {        
    public static void main(String[] args) {            
        Map<String,Employee> empl = new HashMap <String,Employee>();
        String csvFile= "C:/Users/rapurohi/Desktop/employee.csv";
        BufferedReader br=null;
        String line= "";
        String csvSplitBy=",";

        try{                
            br=new BufferedReader(new FileReader(csvFile));
            while ((line =br.readLine())!=null){

                String [] employee=line.split(csvSplitBy);
                Employee e=new Employee(employee[0], employee[1], employee[2]);
                empl.put((employee[0]),e);
                System.out.println("Employee[id="+employee[0]+"name="+employee[1]+"salary="+employee[2]+"]" );
            }               
       }catch (FileNotFoundException|IOException e){
            e.printStackTrace();
       }

        }finally{
            if(br!=null){
                try{
                    br.close();
                }catch(IOException e){
                e.printStackTrace();
                }
            }
        }    
    }
}

我使用的 csv 如下所示:

empid,name,salary
"456","John","4000"
"457","James","5000"
"458","Jack","3000"
"459","Jenny","6000"

员工的数据VO看起来像

包 com.cg.dto;

公共类员工{

字符串 empId;

字符串 empName;

字符串雇员工资;

公共字符串 getEmpId() {

返回 empId;

}

public void setEmpId(String empId) {

this.empId = empId;

}

公共字符串 getEmpName() {

返回员工姓名;

}

public void setEmpName(String empName) {

this.empName = empName;

}

公共字符串 getEmpSalary() {

返回雇员工资;

}

public void setEmpSalary(String empSalary) {

this.empSalary = empSalary;

}

public Employee(String empId, String empName, String empSalary) {

超级();

this.empId = empId;

this.empName = empName;

this.empSalary = empSalary;

}

我需要找到最高薪水并将该条目写入 Csv 文件作为输出。

【问题讨论】:

  • 发生了哪些意想不到的事情?
  • 我被困在这个问题上。我应该如何继续它允许我获取薪水列并在单独的 csv 中给出最高薪水。
  • @Choirbean 集合和迭代器由于 Hashmap 中的员工对象而不起作用。
  • empl.values() 应该返回一个Collection&lt;Employee&gt;
  • 实际上collections.max(empl.values()) 不适用于员工类型

标签: sorting csv


【解决方案1】:

假设您只需要帮助找到最高薪水,这里有一个简单的例子:

int maxSal = 0;
Employee highestPayedEmployee = null;
for (Employee employee : empl.values()) {
    if(employee.getSalary() > maxSal){
        maxSal = employee.getSalary();
        highestPayedEmployee = employee;
    }
}

这假定您的 Employee 类有一个 getSalary() 方法,该方法以数字形式返回薪水。

如果需要,您可以将字符串转换为数字:

Integer.parseInt(salaryString);

【讨论】:

  • 我从 csv 读取薪水,所以读取为字符串。你能建议和回答吗
  • 如果您仔细查看此答案中的最后一件事,您应该会找到有关如何“将字符串转换为数字”的提示。如果您确实需要比这更多的帮助,我建议您在问题中也发布您的 Employee 课程,以便我们知道应该在那里进行哪些更改以使事情正常进行。
  • 应要求我已放置员工档案。我想从这三个记录中找到员工的最高工资并写入一个新的 CSV 文件。
  • 我的示例代码的快速修复是使用 maxSal = Integer.parseInt(employee.getSalary()); 代替。但实际上,您最好将薪水解析为 int 类中的 Employee 。让它存储一个 int 并在构造函数/设置器中执行Integer.parseInt(...)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多