我需要检查List
中的Strings
以包含某些预定义的字符串,并且-如果所有这些预定义的字符串都包含在列表中-我需要将该列表写入文件。
首先,我想做类似的事情
if(doesTheListContainPredefinedStrings(list))
writeListIntoFile(list);
doesTheListContainPredefinedStrings
和writeListIntoFile
执行循环以检查prefefinedStrings并将列表中的每个元素分别写入文件。
但是-由于在这种情况下,我不得不担心性能-我想利用以下事实:在doesTheListContainPredefinedStrings
方法中,我仍在评估列表的元素一次。
我也考虑过类似的事情
String[] predefinedStrings = {...};
...
PrintWriter pw = new FileWriter("fileName");
int predefinedStringsFound = 0;
for (String string : list)
{
if (predefinedStrings.contains(string))
predefinedStringsFound++;
pw.println(string);
}
if (predefinedStringsFound == predefinedStrings.length)
pw.close();
由于我观察到了-至少在我正在开发的系统上(Ubuntu 19.04)-如果我不关闭流,则不会将字符串写入文件中。 但是,此解决方案似乎真的很糟糕,并且仍会创建文件,因此-如果列表未通过检查-无论如何,我都会有问题将其删除(这需要对存储进行另一次访问)。
有人可以建议我采取更好/最好的方法,并解释为什么对我而言更好/最好?
答案 0 :(得分:1)
检查相反的情况-要检查的字符串列表中的predef中是否缺少任何字符串?
Collection<String> predefs; // Your certain predefined strings
List<String> list; // Your list of strings to check
if( ! predefs.parallelStream().anyMatch( s -> ! list.contains( s ) ) )
writeListIntoFile(list);
一旦在字符串要检查的列表中找不到来自predefs的第一个字符串,上述lambda表达式就会停止,并返回true
—在这种情况下,您不能写文件。 />
它不会检查要检查的字符串中是否包含其他未包含在predefs字符串中的字符串。