boolean (@NotNull Predicate<? super E> filter) { Set<DisposableWrapper> removedWrappers = new ReferenceOpenHashSet<>(myWrappedList.size()); boolean result = myWrappedList.removeIf(disposableWrapper -> { if (filter.test(disposableWrapper.delegate) && (disposableWrapper.makeUnique() || removedWrappers.contains(disposableWrapper))) { removedWrappers.add(disposableWrapper); return true; } return false; }); for (DisposableWrapper disposableWrapper : removedWrappers) { disposableWrapper.disposeWithoutRemoval(); } return result; }