package tools; import java.util.Iterator; import java.util.function.BiConsumer; import java.util.function.Consumer; public class StringBuilders { public static <T> void formatSequence(StringBuilder b,Iterator<T> i,String separator, Consumer<T> v){ if(!i.hasNext()){return;} v.accept(i.next()); while(i.hasNext()){ b.append(separator); v.accept(i.next()); } } public static <T1,T2> void formatSequence(StringBuilder b,Iterator<T1> i1,Iterator<T2> i2,String separator, BiConsumer<T1,T2> v){ if(!i1.hasNext()){return;} v.accept(i1.next(),i2.next()); while(i1.hasNext()){ b.append(separator); v.accept(i1.next(),i2.next()); }} @FunctionalInterface public interface TriConsumer<T1,T2,T3> {public abstract void accept(T1 arg1,T2 arg2,T3 arg3);} public static <T1,T2,T3> void formatSequence(StringBuilder b,Iterator<T1> i1,Iterator<T2> i2,Iterator<T3> i3,String separator, TriConsumer<T1,T2,T3> v){ if(!i1.hasNext()){return;} v.accept(i1.next(),i2.next(),i3.next()); while(i1.hasNext()){ b.append(separator); v.accept(i1.next(),i2.next(),i3.next()); }} //For more then two, we will need such horror: Iterator<Integer> blah=IntStream.range(0,ps.getEs().size()).iterator(); }