我正在嘗試簡化以下代碼。
while(results.next())
for(String column : colNames){
if(EmptyUtil.isEmpty(results.getString(column))) {
emptyCount ;
}
}
if(emptyCount == colNames.size()){
break;
}
}
我的主要目標是讀取一個 CSV 檔案直到一個空行并從那里完成讀取檔案。我必須使用這個 Csvjdbd 驅動程式)。
在上面的代碼中,results是一個CsvResultSet(我使用 Csvjdbc 庫來獲得這個結果集)。此 CsvResultSet 表示 for 回圈內 CSV 檔案中的一行。基本上我正在瀏覽 CSV 檔案中的每一行 bcolNames是CSV
中的列標題串列。通過使用results.toString(column),我可以獲取行中特定單元格中的值。
如果行中的所有單元格都是空的,我應該中斷 while 回圈。
上面的代碼按預期作業。我只需要知道如何進一步簡化它。
uj5u.com熱心網友回復:
我會使用 Stream API 來決定,并使用外部變數而不是break.
boolean wasEmptyRow = false;
while (!wasEmptyRow && results.next()) {
wasEmptyRow = colNames
.stream()
.map(column -> results.getString(column))
.allMatch(EmptyUtil::isEmpty);
if (! wasEmptyRow) {
// process
}
}
您只需從列名創建一個流,用 中的當前值替換所有值result,然后檢查它們是否都為空。
uj5u.com熱心網友回復:
嘗試這個。
L: while(results.next()) {
for(String column : colNames){
if(!EmptyUtil.isEmpty(results.getString(column))) {
continue L;
}
}
break;
}
uj5u.com熱心網友回復:
不確定這更簡單,但可能更具可讀性:
while (results.next() && !allColumnsEmpty(results, colNames)) {
}
...
private boolean allColumsEmpty(ResultSet results, String...colNames) {
for(String column : colNames){
if(!EmptyUtil.isEmpty(results.getString(column))) {
return false;
}
}
return true;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/313178.html
