使用String谓词过滤流

ohw*_*ppp 3 java java-stream

我想创建一个接收DataFiles List的方法,然后在其中一个字段上使用String谓词过滤它,并返回DataFiles的List而不是字符串.

这是我的代码:

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();
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时,.map(DataFile::getFileName)我将我的流转换为,Stream<String>但我想保留它,Stream<DataFile>并仍然使用过滤器(即Predicate<String>)DataFile::getFileName.那可能吗?

Joh*_*ica 5

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());
}
Run Code Online (Sandbox Code Playgroud)