【发布时间】:2019-07-25 10:19:46
【问题描述】:
我正在使用 JCIFS 比较文件夹(收件人和发件人)中的文件。在比较过程中可能会出现两种情况: - 文件不存在于接受者 - 文件存在于acceptor
我需要一张地图,其中比较的文件按上述两种类型分组,所以我可以复制不存在的文件或检查现有文件的大小和修改日期...
我想使用 lambdas 和流来实现它,因为我会在不久的将来使用并行流,而且它也很方便...\
我已经设法制作了一个可以检查文件是否存在并创建地图的工作原型方法:
private Map<String, Boolean> compareFiles(String[] acceptor, String[] sender) {
return Arrays.stream(sender)
.map(s -> new AbstractMap.SimpleEntry<>(s, Stream.of(acceptor).anyMatch(s::equals)))
Map.Entry::getValue)));
.collect(collectingAndThen(
toMap(Map.Entry::getKey, Map.Entry::getValue),
Collections::<String,Boolean> unmodifiableMap));
}
但我无法按地图值添加更高级别的分组...
我有这样一段无法工作的代码:
private Map<String, Boolean> compareFiles(String[] acceptor, String[] sender) {
return Arrays.stream(sender)
.map(s -> new AbstractMap.SimpleEntry<>(s, Stream.of(acceptor).anyMatch(s::equals)))
.collect(groupingBy(
Map.Entry::getValue,
groupingBy(Map.Entry::getKey, Map.Entry::getValue)));
}
}
我的代码无法编译,因为我错过了一些非常重要的东西。谁能帮助我并解释如何使这个 lambda 正确?
附:方法参数中的数组是 SmbFiles samba 目录:
private final String master = "smb://192.168.1.118/mastershare/";
private final String node = "smb://192.168.1.118/nodeshare/";
SmbFile masterDir = new SmbFile(master);
SmbFile nodeDir = new SmbFile(node);
Map<Boolean, <Map<String, Boolean>>> resultingMap = compareFiles(masterDir, nodeDir);
【问题讨论】:
标签: java lambda java-stream collectors