HStream - обертка над Stream, позволяющая использовать его повторно
Примеры создания экземпляра класса:
HStream<String> stream = HStream.empty();
HStream<String> stream = HStream.of("Hello", "world!");
HStream<String> stream = HStream.of(Stream.of("Hello", "world!"));
HStream<String> stream = HStream.of(Arrays.asList("Hello", "world!"));
HStream<String> stream = HStream.of(Collections.emptyEnumeration());
Пример использования:
// imports
import ru.hzerr.HStream;
public class CtMethodBytecodeBuilder {
private CtMethodByteCodeBuilder() {}
private HStream<CtMethod> methods;
public static CtMethodByteCodeBuilder init(CtClass clazz) {
CtMethodByteCodeBuilder builder = new CtMethodByteCodeBuilder();
builder.methods = HStream.of(clazz.getDeclaredMethods());
return builder;
}
public CtMethodByteCodeBuilder filter(Predicate<CtMethod> predicate) {
methods.filter(predicate);
return this;
}
public CtMethodByteCodeBuilder filterByNames(String... names) {
HStream<String> namesHStream = HStream.of(names);
methods.filter(method -> namesHStream.anyMatch(name -> method.getName().equals(name)));
return this;
}
public CtMethodByteCodeBuilder removeModifiers(Integer... modifiers) {
HStream<Integer> modifiersStream = HStream.of(modifiers);
methods.forEach(method -> modifiersStream.forEach(modifier -> method.setModifiers(method.getModifiers() & ~modifier)));
return this;
}
public void setEmptyBody() {
methods.forEach(method -> ExceptionWrapper.run(() -> method.setBody("return;")));
}
}