使用字符串谓词过滤流



我想制作一种接收数据文件列表的方法,然后在其字段之一上使用字符串谓词对其进行过滤,并返回数据文件列表,而不是字符串。

这是我的代码:

public static List<DataFile> someMethod(List<DataFile> dataFiles) {
    return dataFiles
            .stream()
            .map(DataFile::getFileName)
            .filter(companyAndDateFilter(date, BLABLA, LALALA))
            .collect(Collectors.toList());
}
private static Predicate<String> companyAndDateFilter(LocalDate date, String... companyNames) {
    String companies = getCompaniesAsString(companyNames);
    String formattedDate = formatTheDate(date);
    Pattern pattern =  Pattern
            .compile("^(" + companies + ")_(" + formattedDate + ")");
    LOGGER.info("Filtering files using RegEx: " + pattern.pattern());
            return pattern.asPredicate();
}

进行.map(DataFile::getFileName)时,我将流转换为Stream<String>,但我想将其保留为Stream<DataFile>,并且仍然在该DataFile::getFileName上使用过滤器(即Predicate<String>)。这可能吗?

public static List<DataFile> someMethod(List<DataFile> dataFiles) {
    Predicate<String> hasCompanyAndDate = companyAndDateFilter(date, BLABLA, LALALA);
    return dataFiles.stream()
        .filter(dataFile -> hasCompanyAndDate.test(dataFile.getFileName()))
        .collect(Collectors.toList());
}

最新更新