You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Java中如何用Stream API的Lambda实现File数组复杂条件过滤

改写后的完整实现代码
private ArrayList<String> findPhotos(Date startTimestamp, Date endTimestamp, String keywords, String longitude, String latitude) {
    File[] fList = file.listFiles();
    return Optional.ofNullable(fList)
            .map(Arrays::stream)
            .orElseGet(Stream::empty)
            // 时间范围过滤
            .filter(f -> (startTimestamp == null && endTimestamp == null)
                    || (f.lastModified() >= startTimestamp.getTime() && f.lastModified() <= endTimestamp.getTime()))
            // 关键词过滤
            .filter(f -> keywords.isEmpty() || f.getPath().contains(keywords))
            // 经度过滤
            .filter(f -> longitude.isEmpty() || f.getPath().contains(longitude))
            // 纬度过滤
            .filter(f -> latitude.isEmpty() || f.getPath().contains(latitude))
            // 提取文件路径
            .map(File::getPath)
            // 收集为ArrayList返回,匹配原方法返回值类型
            .collect(Collectors.toCollection(ArrayList::new));
}
核心说明
  • 用Optional.ofNullable处理file.listFiles()返回null的场景,和原逻辑的非空判断效果完全一致,避免空指针异常
  • 拆分多维度过滤规则到独立filter方法,比原嵌套条件可读性更强,完全匹配要求的过滤逻辑
  • 最终用Collectors.toCollection(ArrayList::new)直接返回ArrayList类型,无需额外类型转换,和原方法返回值定义对齐
需要导入的依赖类
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;

内容的提问来源于stack exchange,提问作者Aaron Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:54:03