使用String谓词过滤流

时间:2017-09-28 17:41:04

标签: java java-stream

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

这是我的代码:

>> A{1}

ans =

   1.0e+05 *

   1.0656 + 2.2578i
  -1.7602 + 1.9836i
  -2.9125 + 0.0000i

当我执行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>){ {1}}。这可能吗?

1 个答案:

答案 0 :(得分: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());
}