@Override public NonEmptyList<T> append(T value) { return of(head, tail.append(value)); }
@Override public ImmutableList<T> drop(long num) { if(num>=size()) return Seq.empty(); return unitStream(stream().drop(num)); }
public static <T> NonEmptyList<T> cons(T value, ImmutableList<T> tail){ return new NonEmptyList<>(value,tail); }
@Override public NonEmptyList<T> reverse() { return of(head).prependAll(tail); }
public static <T> NonEmptyList<T> of(T head, ImmutableList<T> list){ return cons(head,list); }
default <R> R foldInvalidLeft(R zero, BiFunction<R,? super E,R> fold){ return toEither().mapLeft(l->l.foldLeft(zero,fold)).swap().orElse(zero); } default E foldInvalidLeft(Monoid<E> reducer){
@Override public T getOrElse(int pos, T alt) { return get(pos).orElse(alt); }
@Test public void emptyConvert(){ assertFalse(empty().to().option().isPresent()); assertTrue(empty().nonEmptyList(()->10).size()>0); assertFalse(empty().seq().size()>0); assertFalse(empty().lazySeq().size()>0); assertFalse(empty().vector().size()>0); assertFalse(empty().bankersQueue().size()>0); assertFalse(empty().hashSet().size()>0); assertFalse(empty().treeSet((Comparator)Comparator.naturalOrder()).size()>0); assertFalse(empty().to().hashMap(t->t,t->t).size()>0); assertFalse(empty().to().streamable().size()>0); assertFalse(empty().to().seq().size()>0); assertFalse(empty().to().lazySeq().size()>0); assertFalse(empty().to().vector().size()>0); assertFalse(empty().to().bankersQueue().size()>0); assertFalse(empty().to().hashSet().size()>0); assertFalse(empty().to().treeSet((Comparator)Comparator.naturalOrder()).size()>0); assertFalse(empty().toSet().size()>0); assertFalse(empty().toList().size()>0); assertFalse(empty().to().streamable().size()>0); assertFalse(empty.toMap(a->a).size()>0); assertFalse(empty.toMap(a->a,a->a).size()>0); assertFalse(empty.toHashMap(a->a).size()>0); assertFalse(empty.toHashMap(a->a,a->a).size()>0); }
public String toString(){ String str = either.mapLeft(l -> l.join(",")).swap().orElse( ""); return "Invalid["+str+"]"; } @Override
public T reduce(BiFunction<? super T, ? super T, ? extends T> f){ Iterator<T> it = iterator(); T res = it.next(); while(it.hasNext()){ T next = it.next(); res= f.apply(res,next); } return res; } public <R> R foldLeft(R zero,BiFunction<R, ? super T, R> f) {
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null) return false; if(o instanceof PersistentList){ PersistentList<T> im =(PersistentList<T>)o; return equalToIteration(im); } return false; }
public <R> NonEmptyList<R> flatMapNel(Function<? super T, ? extends NonEmptyList<R>> fn) { return fn.apply(head).appendAll(tail.flatMap(fn)); }
public static <T> NonEmptyList<T> of(T head, T... value){ LazySeq<T> list = LazySeq.of(value); return cons(head,list); } public static <T> NonEmptyList<T> of(T head){
@Override public NonEmptyList<T> reverse() { return of(head).prependAll(tail); }
default E foldInvalidLeft(Monoid<E> reducer){ return toEither().mapLeft(l->l.foldLeft(reducer.zero(),reducer)).swap().orElse(reducer.zero()); }
@Override public T getOrElseGet(int pos, Supplier<? extends T> alt) { return get(pos).orElseGet(alt); }