我有两个类似的字符串流:
Stream<String> thisWeekFile = Files.lines(thisWeekPath);
Stream<String> lastWeekFile = Files.lines(lastWeekPath);
与上周相比,本周文件可以具有相同的字符串,可以添加某些字符串,也可以删除某些字符串。现在,我只对上周文件中存在的字符串感兴趣,而对本周文件中的字符串不再感兴趣。我如何获得那些琴弦?我尝试过
lastWeekFile.filter(e->!thisWeekFile.anyMatch(e));
上面给出错误:String不能转换为谓词。
理想的是我想要类似的东西
lastWeekFile.filter(e->!thisWeekFile.contains(e));
答案 0 :(得分:3)
您需要collect
个流,然后可能删除lastWeekFile
的条目(已更新存在):
Set<String> thisWeekFile = Files.lines(thisWeekPath).collect(Collectors.toSet());
List<String> lastWeekFile = Files.lines(lastWeekPath)).collect(Collectors.toList());
lastWeekFile.removeIf(e -> !thisWeekFile.contains(e));
答案 1 :(得分:1)
应该是
lastWeekFile.filter(e->Files.lines(thisWeekPath).noneMatch(o -> o.equals(e)))...;
请注意,您不能一次使用同一流,因此必须多次生成本周的Stream
。
答案 2 :(得分:1)
使用Files.readLines()
方法返回List而不是流,可以在没有流api的情况下完成:
List<String> thisWeekFile = Files.readAllLines(thisWeekPath);
List<String> lastWeekFile = Files.readAllLines(lastWeekPath);
lastWeekFile.removeAll(thisWeekFile);