java - 使用字符串谓词过滤流

标签 java java-stream

我想创建一个方法来接收数据文件列表,然后在其中一个字段上使用字符串谓词对其进行过滤,并返回数据文件列表而不是字符串。

这是我的代码:

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>并且仍然在 Predicate<String> 上使用过滤器(即 DataFile::getFileName ) .这可能吗?

最佳答案

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());
}

关于java - 使用字符串谓词过滤流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46475308/

相关文章:

java - 如何重写java循环并将临时结果保存到java8流

java - 即使未使用任何服务,也会出现泄漏窗口异常

java - 如何在 JCR-SQL2 中应用聚合函数(如 MIN、MAX、COUNT)?

java - 请推荐一个好的史莱姆教程或截屏视频

Java 8流并行reduce BiFunction累加器

java - 如何根据集合值的大小对 map 进行排序?

java - 如何使用 Streams 将二维列表转换为一维列表?

java - JSP - 连接并将数据插入 MySQL 数据库

java - 如何在 Hibernate Criteria 中加入后获取行数?

java - 将对象列表转换为 map