Можно ли эффективно использовать окончательный HashSet
в функции предиката параллельного потока?Безопасность потока HashSet в параллельном потокеStream
Если нет, то какая хорошая структура данных для использования? Я не вижу ConcurrentSet
... Полагаю, я мог бы использовать ConcurrentHashMap.entrySet()
.
Из того, что я смог собрать, даже если HashSet не изменен, последнее состояние может быть недоступно во всех потоках. Но, может быть, есть простой трюк, чтобы сделать его доступным?
List<Integer> items = Stream
.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
.collect(Collectors.toList());
Set<Integer> exclude = Stream
.of(5, 10, 15)
.collect(Collectors.toSet());
List<Integer> filtered = items
.parallelStream()
.filter(num -> !exclude.contains(num))
.collect(Collectors.toList());
Да, это должно быть хорошо. –
Что касается потокобезопасного набора, вы можете использовать 'ConcurrentHashMap.newKeySet()'. –