Skip to content
This repository has been archived by the owner on Jun 25, 2022. It is now read-only.

HZERR/HStream

Repository files navigation

HStream 1.7.2 Full

Не рекомендуется к использованию из-за скорости работы

HStream - обертка над Stream, позволяющая использовать его повторно

Примеры создания экземпляра класса:

  1. HStream<String> stream = HStream.empty();
  2. HStream<String> stream = HStream.of("Hello", "world!");
  3. HStream<String> stream = HStream.of(Stream.of("Hello", "world!"));
  4. HStream<String> stream = HStream.of(Arrays.asList("Hello", "world!"));
  5. 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;"))); 
  }
}