package org.jetbrains.io;
import com.intellij.util.Consumer;
import gnu.trove.TObjectObjectProcedure;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
public class RetainCondition<K, V extends Identifiable> implements TObjectObjectProcedure<K, V> {
private final int[] ids;
@Nullable
private final Consumer<V> removedValueConsumer;
public RetainCondition(int[] ids) {
this(ids, null);
}
public RetainCondition(int[] ids, @Nullable Consumer<V> removedValueConsumer) {
Arrays.sort(ids);
this.ids = ids;
this.removedValueConsumer = removedValueConsumer;
}
@Override
public boolean execute(K key, V value) {
boolean retained = Arrays.binarySearch(ids, value.getId()) < 0;
if (!retained && removedValueConsumer != null) {
removedValueConsumer.consume(value);
}
return retained;
}
}