java - Java比较csv文件值
问题描述
我正在尝试创建一个 csv 文件,其中每行仅显示 1 个团队名称,因此当您单击按钮两次时,它只会添加团队名称(如果它不存在)。目前,它会在您每次按下按钮时添加团队“UWE”。代码如下:
public void showStats(ActionEvent event){
try {
File matchFile = new File("src/sample/matchData.csv");
File scoreFile = new File("src/sample/scoreData.csv");
Scanner matchReader = new Scanner(matchFile);
Scanner scoreReader = new Scanner(scoreFile);
while (matchReader.hasNextLine()) {
String data = matchReader.nextLine();
List<String> matchList = Arrays.asList(data.split(","));
while (scoreReader.hasNextLine()) {
String dataScore = scoreReader.nextLine();
List<String> dataScoreList = Arrays.asList(dataScore.split(","));
if (dataScoreList.get(0).equals(matchList.get(0))) {
//
} else {
writeExcel("scoreData", matchList.get(0)) ;
}
System.out.println(dataScoreList);
}
System.out.println(matchList);
}
matchReader.close();
scoreReader.close();
} catch (FileNotFoundException e) {
System.out.println("An error occurred.");
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
csv文件“matchData”包含:UWE,KCC,Jin,Julia,Chris,Ryan,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0, 0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,5,0
csv 文件“scoreData”中有一个空行
解决方案
您可以先浏览您的源 CSV 文件,然后仅将包含唯一团队密钥的行放入地图中......
while (matchReader.hasNextLine()) {
String data = matchReader.nextLine();
String[] record = data.split(",", 2);
Map<String, String> matchList = new TreeMap<>();
matchList.putIfAbsent(record[0], record[1]); // only unique keys are entered.
}
// TODO write to Excel each entry in the map (you don't need to check for unique keys)
请注意,在地图完成后写入 Excel。这是最好的方法;或者至少比您在原始帖子中显示的更好。使用这种方法,您可以让数据结构简化您的流程(并且没有嵌套循环)。
更新:
我忘了提到它matchList.putIfAbsent(K, V)
适用于 Java 8 及更高版本。如果使用 Java 7 或更早版本(应尽快升级 Java),则必须执行以下操作:
String value = matchList.get(record[0]);
if (value == null) {
matchList.put(record[0], record[1]);
}
这是因为Map#get(K)
返回null
的是没有找到条目或映射允许为给定键输入空值。否则,它将返回先前的值。Java 8 中引入的新方法会自动执行此检查。
推荐阅读
- apache-kafka-streams - 根据部分数据属性更新KTable
- postgresql - archive_command 配置 POSTGRESQL 10.4
- azure - Azure 指标:dtu_used 不接受零维情况
- php - Paypal Tax Computation
- reactjs - 有什么方法可以通过路由在反应中从 api 呈现动态添加的模式?
- ruby-on-rails - Is there a way to delete a date in a range of dates?
- ios - 用于拨出电话的 CallKit UI
- javascript - 将 Javascript 日期转换为 YYYY-MM-DDTHH:MM:SS+00:00(带时区偏移)
- java - 按钮单击事件以更改图像
- angular - 来自 Observable 列表的 RxJS Observable 项目未更新