/** * Joins the string representations of this elements using a specific delimiter, prefix and suffix. * <p> * Example: {@code List.of("a", "b", "c").mkString("Chars(", ", ", ")") = "Chars(a, b, c)"} * * @param prefix prefix of the resulting string * @param delimiter A delimiter string put between string representations of elements of this * @param suffix suffix of the resulting string * @return a new String */ default String mkString(CharSequence prefix, CharSequence delimiter, CharSequence suffix) { final StringBuilder builder = new StringBuilder(prefix); iterator().map(String::valueOf).intersperse(String.valueOf(delimiter)).forEach(builder::append); return builder.append(suffix).toString(); }
@Override default List<T> intersperse(T element) { return ofAll(iterator().intersperse(element)); }
@Override public Vector<T> intersperse(T element) { return ofAll(iterator().intersperse(element)); }
/** * Intersperse values from this generator instance with those of another. * * @param other another T generator to accept values from. * @return A new T generator */ default Gen<T> intersperse(Gen<T> other) { final Iterator<Gen<T>> iter = Iterator.continually(this).intersperse(other); return random -> iter.get().apply(random); }
/** * Joins the string representations of this elements using a specific delimiter, prefix and suffix. * <p> * Example: {@code List.of("a", "b", "c").mkString("Chars(", ", ", ")") = "Chars(a, b, c)"} * * @param prefix prefix of the resulting string * @param delimiter A delimiter string put between string representations of elements of this * @param suffix suffix of the resulting string * @return a new String */ default String mkString(CharSequence prefix, CharSequence delimiter, CharSequence suffix) { final StringBuilder builder = new StringBuilder(prefix); iterator().map(String::valueOf).intersperse(String.valueOf(delimiter)).forEach(builder::append); return builder.append(suffix).toString(); }
@Override default List<T> intersperse(T element) { return ofAll(iterator().intersperse(element)); }
@Override public Vector<T> intersperse(T element) { return ofAll(iterator().intersperse(element)); }