Вы можете выполнить операцию в отдельном потоке в WPF, используя класс BackgroundWorker.
проверить этот пример Как использовать фоновый рабочий стол WPF
И читайте о классе в MSDN здесь http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx
Вы можете использовать набор. Содержит для HashSet значение O (1) по сравнению с O (n) для списка, поэтому вы никогда не должны использовать список, если вам часто нужно запускать содержит.
Set<String> bSet = new HashSet<>(bListb);
aLista.stream().filter(a -> !bSet.contains(a)).collect(Collectors.toList());
Поскольку aLista
очень ограничен в размерах и bListb
потенциально огромен, вам следует преобразовать aLista
в Set
, а не bListb
.
Set<String> missing = new HashSet<>(aLista);
for (String s : bListb) {
if (missing.isEmpty())
break;
missing.remove(s);
}
Код даже закоротит итерацию bListb
, если все значения будут найдены, тогда как преобразование bListb
в Set
не позволит такую логику короткого замыкания.