检查字符串数组并将其写入文件的最有效方法

时间:2019-07-09 15:00:45

标签: java list file

我需要检查List中的Strings以包含某些预定义的字符串,并且-如果所有这些预定义的字符串都包含在列表中-我需要将该列表写入文件。

首先,我想做类似的事情

if(doesTheListContainPredefinedStrings(list))
    writeListIntoFile(list);

doesTheListContainPredefinedStringswriteListIntoFile执行循环以检查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)-如果我不关闭流,则不会将字符串写入文件中。 但是,此解决方案似乎真的很糟糕,并且仍会创建文件,因此-如果列表未通过检查-无论如何,我都会有问题将其删除(这需要对存储进行另一次访问)。

有人可以建议我采取更好/最好的方法,并解释为什么对我而言更好/最好?

1 个答案:

答案 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字符串中的字符串。