class LimitViolationFilter {

    public List<LimitViolation> apply(List<LimitViolation> violations, Network network) {
        Objects.requireNonNull(violations);
        Objects.requireNonNull(network);

        return violations.stream()
                .filter(violation -> accept(violation.getLimitType()))
                .filter(violation -> accept(LimitViolationHelper.getNominalVoltage(violation, network)))
                .filter(violation -> accept(LimitViolationHelper.getCountry(violation, network).orElse(null)))
                .collect(Collectors.toList());
    }

    public  LimitViolationFilter(Set<LimitViolationType> violationTypes);
    public  LimitViolationFilter();
    public  LimitViolationFilter(Set<LimitViolationType> violationTypes, double minBaseVoltage);
    public  LimitViolationFilter(Set<LimitViolationType> violationTypes, double minBaseVoltage, Set<Country> countries);

}