我现在已经很长一段时间一直在撞墙,我真的很感激一些帮助。
我有2个流,我想要的是从一个流中排除元素,如果它们在另一个流中
我正在尝试编写一个程序来查找所有音频文件,然后将它们写入文件。你给它一个文件夹来检查,它找到该文件夹中的所有音频文件,并将它们全部写入文件。那部分效果很好。如果你再次给它相同的文件夹,问题就会发挥作用,我希望能够排除已经存在的音频文件。以下是有问题的代码:
Stream<Path> s = Files.walk(folder.toPath()).filter(p -> isAudio(p));
然后是isAudio(Path p)方法:
try
{
if (Files.probeContentType(p).startsWith("audio"))
{
if (PS != null)
{
System.out.println("boo");
System.out.println(PS.noneMatch(t -> t.equals(p.toString())));
System.out.println("boo2");
}
return true;
}
}
catch (Exception e) {System.err.println(e); }
return false;
PS是我的第二个流,它从文件读入。我测试了它,它是正确的。我的问题是不打印noneMatch的结果,并且永远不会显示“boo2”。它每次都被跳过。它跳到“返回假”;每一次,我完全迷失了答案。拜托,我能得到的任何帮助都将不胜感激!!
答案 0 :(得分:0)
不确定您的系统是如何配置的,但是您的stderr输出可能无法查看。你能尝试用以下内容替换你的catch子句吗?
catch (Exception e) {
System.out.println("Exception encountered: " + e);
System.err.println(e);
}
然后尝试重新运行您的代码,也许您将能够看到&#34;遇到异常&#34;消息,以及被抛出的例外情况。
答案 1 :(得分:0)
也许您应该尝试将调用分成两部分:
audio
的文件key
(姓名)像这样(伪代码):
yourFiles.filter(t -> "*audio*".matches(t)).filter(distinctByKey( e -> e.getAbsolutePath())
Here I found the answer to problem 2 (stackoverflow link)。有distinctByKey方法的代码。