我想在我的Java項目中使用Lambda表達式。我的代碼從一個文件夾讀取文件,將它們存儲在一個數組中,並按降序排列它們。其他方法將使用此代碼來獲取包含最近日期的文件。在Lambda表達式中使用if語句對數組進行排序
Arrays.sort(listOfFiles, (File file1, File file2) -> file2.getName().compareToIgnoreCase(file1.getName()));
的輸出是:
README.txt
forecast-project-export-from-2017-03-06-to-2017-03-10.csv
forecast-project-export-from-2017-02-27-to-2017-03-03.csv
forecast-project-export-from-2017-02-20-to-2017-02-24.csv
forecast-project-export-from-2017-02-13-to-2017-02-17.csv
forecast-project-export-from-2017-02-06-to-2017-02-10.csv
forecast-project-export-from-2017-01-30-to-2017-02-03.csv
forecast-project-export-from-2017-01-23-to-2017-01-27.csv
的輸出是正確然而,該文件夾包含欲忽略或不具有它作爲數組的[0]元素的README.txt文件。有沒有一種方法可以使用if
語句,該語句僅在元素名稱包含「forecast-project-export-from」時對元素進行排序。事情是這樣的:
if (o1.getName().contains("forecast-project-export-from") && o2.getName().contains("forecast-project-export-from")) {
return o2.getName().compareToIgnoreCase(o1.getName());
}
您可以使用if,但這不會幫助您處理文件。你需要從實際輸入中刪除你的文件。您可以使用流來排序它:'tmp.stream()。filter(x - > x.startsWith(「my-prefix」))。sorted((k1,k2) - > k1.compareTo(k2)) .collect(Collectors.toList());' – pandaadb
我認爲你可以過濾你的listOfFiles去除未使用的文件,然後對列表進行排序。 –
,儘管你提到排除'README.txt'文件,這聽起來像你真正想要做的只是_include_文件匹配模式'預測 - 項目 - 出口 - 從 - - 到 .csv'。目前唯一的問題文件是'README.txt',但是如果你只排除那個文件,那麼如果另一個「壞」文件被添加到文件夾中,你的代碼可能會再次破壞。所以,給出的「過濾器」示例是一個很好的起點,但我會爲所需的文件做一個包容性過濾器,而不是當前已知的文件的排他性。 –
lukens