boolean (@Nullable Object obj) { List<DisposableWrapper> removedWrappers = new ArrayList<>(1); boolean result = myWrappedList.removeIf(disposableWrapper -> { if (disposableWrapper.delegate.equals(obj) && (removedWrappers.isEmpty() && disposableWrapper.makeUnique() || removedWrappers.contains(disposableWrapper))) { removedWrappers.add(disposableWrapper); return true; } return false; }); for (DisposableWrapper disposableWrapper : removedWrappers) { disposableWrapper.disposeWithoutRemoval(); } return result; }