加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何简洁地收集流到地图?

发布时间:2020-12-15 08:25:25 所属栏目:Java 来源:网络整理
导读:给定一个目录名列表,我想生成目录中所有文件到其内容的映射. 有关更明确实施的任何建议吗? MapFile,String map = new HashMap(); Arrays.stream(filenames) .map(s - FileUtils.listFiles(new File(rootdir,s),new RegexFileFilter(".*"),DirectoryFileFilt
给定一个目录名列表,我想生成目录中所有文件到其内容的映射.

有关更明确实施的任何建议吗?

Map<File,String> map = new HashMap<>();

    Arrays.stream(filenames)
            .map(s -> FileUtils.listFiles(new File(rootdir,s),new RegexFileFilter(".*"),DirectoryFileFilter.DIRECTORY))
            .flatMap(Collection::stream)
            .forEach(f -> {
                try {
                    map.put(f,FileUtils.readFileToString(f));
                }
                catch (IOException e) {
                    e.printStackTrace();
                }
            });

    return map;

`

解决方法

你应该使用Collectors.toMap:

Map<File,String> map = Arrays.stream(filenames)
    .map(s -> FileUtils.listFiles(new File(rootdir,DirectoryFileFilter.DIRECTORY))
    .flatMap(Collection::stream)
    .collect(Collectors.toMap(
        Function.identity(),f-> {
            try { return FileUtils.readFileToString(f); }
            catch (IOException ioe) { return null; }
        }
    ));

它的第一个参数是键映射函数.未修改的文件应该用作键,因此我们可以使用标识功能.
它的第二个参数是值映射函数,我们将Files映射到它们的内容.

请注意,我的值映射函数将生成空值,并且在无法读取文件内容时不会输出任何错误.除非您确信这样的IOException永远不会发生,否则请考虑使用其他答案之一.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读