class OrCombinedBasePredicateImpl<ENTITY>
    extends AbstractCombinedPredicate<ENTITY> {

        public OrCombinedBasePredicateImpl(
                List<Predicate<? super ENTITY>> predicates) {

            super(Type.OR, predicates);
        }

        @Override
        public boolean applyAsBoolean(ENTITY entity) {
            requireNonNull(entity);
            return stream().anyMatch(p -> p.test(entity));
        }

        @Override
        public CombinedPredicate<ENTITY> and(Predicate<? super ENTITY> other) {
            requireNonNull(other);
            return CombinedPredicate.and(this, other);
        }

        @Override
        public CombinedPredicate<ENTITY> or(Predicate<? super ENTITY> other) {
            requireNonNull(other);
            return new OrCombinedBasePredicateImpl<>(
                copyAndAdd(getPredicates(), other)
            );
        }

        @Override
        @SuppressWarnings("unchecked")
        public AndCombinedBasePredicateImpl<ENTITY> negate() {
            return new AndCombinedBasePredicateImpl<>(
                getPredicates().stream()
                    .map(p -> (Predicate<ENTITY>) p)
                    .map(Predicate::negate)
                    .collect(toList())
            );
        }
    }

    @Override
    public boolean equals(Object o) {<FILL_FUNCTION_BODY>

        if (this == o) return true;
        if (!(o instanceof CombinedPredicate)) return false;

        final CombinedPredicate<?> that = (CombinedPredicate<?>) o;
        final Iterator<Predicate<? super ENTITY>> it = predicates.iterator();
        return getType() == that.getType()
            && that.stream().allMatch(it.next()::equals);
    
<methods>public SpeedmentPredicate<ENTITY> and(Predicate<? super ENTITY>) ,public SpeedmentPredicate<ENTITY> or(Predicate<? super ENTITY>) <variables>