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; } } )); 它的第一个参数是键映射函数.未修改的文件应该用作键,因此我们可以使用标识功能. 请注意,我的值映射函数将生成空值,并且在无法读取文件内容时不会输出任何错误.除非您确信这样的IOException永远不会发生,否则请考虑使用其他答案之一. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |