FiltersImpl.java
package io.github.jonloucks.metalog.impl;
import io.github.jonloucks.contracts.api.AutoClose;
import io.github.jonloucks.metalog.api.Filterable;
import io.github.jonloucks.metalog.api.Meta;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Predicate;
import static io.github.jonloucks.metalog.impl.Internal.filterCheck;
final class FiltersImpl implements Filterable {
@Override
public AutoClose addFilter(Predicate<Meta> filter) {
final Predicate<Meta> validFilter = filterCheck(filter);
filters.add(validFilter);
return ()-> filters.removeIf(x -> x == validFilter);
}
@Override
public boolean test(Meta meta) {
if (filters.isEmpty()) {
return true;
}
return filters.stream().allMatch(filter -> filter.test(meta));
}
private final List<Predicate<Meta>> filters = new CopyOnWriteArrayList<>();
}