Самый эффективный способ проверить массив строк и затем записать его в файл - PullRequest
0 голосов
/ 09 июля 2019

Мне нужно проверить List из Strings на наличие определенных предопределенных строк и - в случае, если все эти предопределенные строки содержатся в списке - мне нужно записать список в файл.

В качестве первого подхода я подумал сделать что-то вроде

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

, где doesTheListContainPredefinedStrings и writeListIntoFile выполняют циклы, чтобы проверить для PrefinedStrings и записать каждый элемент списка в файл, соответственно.

Но - поскольку в этом случае мне нужно беспокоиться о производительности - я хотел бы использовать тот факт, что в методе doesTheListContainPredefinedStrings я по-прежнему оцениваю элементы списка один раз.

Iтакже подумал о чем-то вроде

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 Ответ

1 голос
/ 09 июля 2019

проверить обратный случай - отсутствует ли какая-либо строка из предопределенных строк в списке строк для проверки?

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);

Вышеупомянутое лямбда-выражение останавливается, как только первая строкаfrom prefs не может быть найден в списке строк для проверки и возвращает true - Вы не должны писать файл в этом случае.Он не проверяет наличие каких-либо дополнительных строк в списке строк для проверки, которые не содержатся в строках предыстории.

...