org.unlaxer.parser.HasChildrenParser Maven / Gradle / Ivy
package org.unlaxer.parser;
import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public interface HasChildrenParser extends Parser{
public Parsers getChildren();
public default HasChildrenParser newFiltered(Predicate cutFilter){
Predicate passFilter = cutFilter.negate();
List newChildren = getChildren().stream()
.filter(passFilter)
.collect(Collectors.toList());
return createWith(Parsers.of(newChildren));
}
public default HasChildrenParser newWithoutRecursive(Predicate cutFilter){
List newChildren = getChildren().stream()
.map(childParser->newWithRecursiveChild(childParser, cutFilter))
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
return createWith(Parsers.of(newChildren));
}
default Optional newWithRecursiveChild(Parser target , Predicate cutFilter){
if(cutFilter.test(target)){
return Optional.empty();
}
if(target instanceof HasChildrenParser){
HasChildrenParser hasChildParser = ((HasChildrenParser) target);
@SuppressWarnings("unchecked")
List children = (List) hasChildParser.getChildren().stream()
.map(childParser->{
if(cutFilter.test(target)){
return Optional.empty();
}
if(childParser instanceof HasChildrenParser){
return Optional.of(((HasChildrenParser)childParser).newWithoutRecursive(cutFilter));
}
return Optional.of(target);
})
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
return Optional.of(createWith(Parsers.of(children)));
}
return Optional.of(target);
}
HasChildrenParser createWith(Parsers children);
} © 2015 - 2025 Weber Informatics LLC | Privacy Policy