Interface ImmutableIterable<A>
-
- Type Parameters:
A- the element type
- All Superinterfaces:
EnhancedIterable<A>,com.jnape.palatable.lambda.functor.Functor<A,EnhancedIterable<?>>,java.lang.Iterable<A>
- All Known Subinterfaces:
ImmutableFiniteIterable<A>,ImmutableNonEmptyFiniteIterable<A>,ImmutableNonEmptyIterable<A>
public interface ImmutableIterable<A> extends EnhancedIterable<A>
AnEnhancedIterablethat is safe from mutation.May be infinite, finite, or empty.
-
-
Method Summary
All Methods Static Methods Instance Methods Default Methods Modifier and Type Method Description default ImmutableNonEmptyIterable<A>append(A element)Lazily appends an element to the end of thisImmutableIterable, yielding a newImmutableNonEmptyIterable.default ImmutableIterable<A>concat(ImmutableIterable<A> other)Lazily concatenates anotherImmutableIterableto the end of thisImmutableIterable, yielding a newImmutableIterable.default ImmutableNonEmptyIterable<A>concat(ImmutableNonEmptyIterable<A> other)Lazily concatenates anImmutableNonEmptyIterableto the end of thisImmutableIterable, yielding a newImmutableNonEmptyIterable.static <A> ImmutableFiniteIterable<A>copyFrom(int maxCount, java.lang.Iterable<A> source)Creates anImmutableFiniteIterableby copying elements from anIterable.static <A> ImmutableFiniteIterable<A>copyFrom(java.util.Collection<A> source)Creates anImmutableFiniteIterableby copying elements from aCollection.static <A> ImmutableFiniteIterable<A>copyFrom(FiniteIterable<A> source)Creates anImmutableFiniteIterableby copying elements from aFiniteIterable.default ImmutableIterable<A>drop(int count)Returns a newImmutableIterablethat drops the firstcountelements of thisImmutableIterable.default ImmutableIterable<A>dropWhile(com.jnape.palatable.lambda.functions.Fn1<? super A,? extends java.lang.Boolean> predicate)Returns a newImmutableIterablethat skips the first contiguous group of elements of thisImmutableIterablethat satisfy a predicate.static <A> ImmutableFiniteIterable<A>emptyImmutableIterable()Creates an emptyImmutableIterable.default ImmutableIterable<A>filter(com.jnape.palatable.lambda.functions.Fn1<? super A,? extends java.lang.Boolean> predicate)Returns a newImmutableIterablethat contains all elements of thisImmutableIterablethat satisfy a predicate.default <B> ImmutableIterable<B>fmap(com.jnape.palatable.lambda.functions.Fn1<? super A,? extends B> f)Returns a newImmutableIterableby applying a function to all elements of thisImmutableIterable.default ImmutableIterable<A>intersperse(A separator)Returns a newImmutableIterablewith the provided separator value injected between each value of thisImmutableIterable.default ImmutableIterable<? extends ImmutableNonEmptyIterable<A>>magnetizeBy(com.jnape.palatable.lambda.functions.Fn2<A,A,java.lang.Boolean> predicate)Returns anIterableof contiguous groups of elements in thisImmutableIterablethat match a predicate pairwise.static <A> ImmutableNonEmptyFiniteIterable<A>of(A first, A... more)Creates anImmutableIterablecontaining the given elements.default <B,C>
com.jnape.palatable.lambda.adt.hlist.Tuple2<? extends ImmutableIterable<B>,? extends ImmutableIterable<C>>partition(com.jnape.palatable.lambda.functions.Fn1<? super A,? extends com.jnape.palatable.lambda.adt.coproduct.CoProduct2<B,C,?>> function)Partitions thisImmutableIterablegiven a disjoint mapping function.default ImmutableNonEmptyIterable<A>prepend(A element)Lazily prepends an element to the front of thisImmutableIterable, yielding a newImmutableNonEmptyIterable.default ImmutableIterable<A>prependAll(A separator)Returns a newImmutableIterablewith the provided separator value injected before each value of thisImmutableIterable.static <A> ImmutableNonEmptyIterable<A>repeat(A element)Returns an infiniteImmutableNonEmptyIterablethat repeatedly iterates a given element.default ImmutableIterable<? extends ImmutableNonEmptyFiniteIterable<A>>slide(int k)"Slides" a window ofkelements across theImmutableIterableby one element at a time.default com.jnape.palatable.lambda.adt.hlist.Tuple2<? extends ImmutableIterable<A>,? extends ImmutableIterable<A>>span(com.jnape.palatable.lambda.functions.Fn1<? super A,? extends java.lang.Boolean> predicate)Returns aTuple2where the first slot is the front contiguous elements of thisImmutableIterablematching a predicate and the second slot is all the remaining elements.default ImmutableNonEmptyIterable<? extends ImmutableIterable<A>>tails()Returns anImmutableNonEmptyIterablecontaining all of the subsequences of tail elements of thisImmutableIterable, ordered by size, starting with the full list.default ImmutableFiniteIterable<A>take(int count)Returns a newImmutableFiniteIterablethat takes the firstcountelements of thisImmutableIterable.default ImmutableIterable<A>takeWhile(com.jnape.palatable.lambda.functions.Fn1<? super A,? extends java.lang.Boolean> predicate)Returns a newImmutableIterablethat limits to the first contiguous group of elements of thisFiniteIterablethat satisfy a predicate.default com.jnape.palatable.lambda.adt.Maybe<? extends ImmutableFiniteIterable<A>>toFinite()Converts thisImmutableIterableto anImmutableFiniteIterableif there is enough information to do so without iterating it.default com.jnape.palatable.lambda.adt.Maybe<? extends ImmutableNonEmptyIterable<A>>toNonEmpty()Converts thisImmutableIterableto aImmutableNonEmptyIterableif it contains one or more elements.default <B,C>
ImmutableFiniteIterable<C>zipWith(com.jnape.palatable.lambda.functions.Fn2<A,B,C> fn, ImmutableFiniteIterable<B> other)Zips together thisImmutableIterablewith anImmutableFiniteIterableby applying a zipping function.default <B,C>
ImmutableIterable<C>zipWith(com.jnape.palatable.lambda.functions.Fn2<A,B,C> fn, ImmutableIterable<B> other)Zips together thisImmutableIterablewith anotherImmutableIterableby applying a zipping function.-
Methods inherited from interface software.kes.enhancediterables.EnhancedIterable
concat, concat, find, isEmpty, toArray, toCollection, zipWith, zipWith, zipWith
-
-
-
-
Method Detail
-
append
default ImmutableNonEmptyIterable<A> append(A element)
Lazily appends an element to the end of thisImmutableIterable, yielding a newImmutableNonEmptyIterable.- Specified by:
appendin interfaceEnhancedIterable<A>- Parameters:
element- the element to append- Returns:
- a
ImmutableNonEmptyIterable<A>
-
concat
default ImmutableIterable<A> concat(ImmutableIterable<A> other)
Lazily concatenates anotherImmutableIterableto the end of thisImmutableIterable, yielding a newImmutableIterable.- Parameters:
other- the otherImmutableIterable- Returns:
- an
ImmutableIterable<A>
-
concat
default ImmutableNonEmptyIterable<A> concat(ImmutableNonEmptyIterable<A> other)
Lazily concatenates anImmutableNonEmptyIterableto the end of thisImmutableIterable, yielding a newImmutableNonEmptyIterable.- Parameters:
other- anImmutableNonEmptyIterable- Returns:
- an
ImmutableNonEmptyIterable<A>
-
drop
default ImmutableIterable<A> drop(int count)
Returns a newImmutableIterablethat drops the firstcountelements of thisImmutableIterable.- Specified by:
dropin interfaceEnhancedIterable<A>- Parameters:
count- the number of elements to drop from thisImmutableIterable. Must be >= 0. May exceed size of thisImmutableIterable, in which case, the result will be an emptyImmutableIterable.- Returns:
- an
ImmutableIterable<A>
-
dropWhile
default ImmutableIterable<A> dropWhile(com.jnape.palatable.lambda.functions.Fn1<? super A,? extends java.lang.Boolean> predicate)
Returns a newImmutableIterablethat skips the first contiguous group of elements of thisImmutableIterablethat satisfy a predicate.Iteration begins at the first element for which the predicate evaluates to false.
- Specified by:
dropWhilein interfaceEnhancedIterable<A>- Parameters:
predicate- a predicate; should be referentially transparent and not have side-effects- Returns:
- a
ImmutableIterable<A>
-
filter
default ImmutableIterable<A> filter(com.jnape.palatable.lambda.functions.Fn1<? super A,? extends java.lang.Boolean> predicate)
Returns a newImmutableIterablethat contains all elements of thisImmutableIterablethat satisfy a predicate.- Specified by:
filterin interfaceEnhancedIterable<A>- Parameters:
predicate- a predicate; should be referentially transparent and not have side-effects- Returns:
- a
ImmutableIterable<A>
-
fmap
default <B> ImmutableIterable<B> fmap(com.jnape.palatable.lambda.functions.Fn1<? super A,? extends B> f)
Returns a newImmutableIterableby applying a function to all elements of thisImmutableIterable.- Specified by:
fmapin interfaceEnhancedIterable<A>- Specified by:
fmapin interfacecom.jnape.palatable.lambda.functor.Functor<A,EnhancedIterable<?>>- Type Parameters:
B- the type returned byf- Parameters:
f- a function fromAtoB. This function should be referentially transparent and not perform side-effects. It may be called zero or more times for each element.- Returns:
- a
ImmutableIterable<B>
-
intersperse
default ImmutableIterable<A> intersperse(A separator)
Returns a newImmutableIterablewith the provided separator value injected between each value of thisImmutableIterable.If this
ImmutableIterablecontains fewer than two elements, it is left untouched.- Specified by:
interspersein interfaceEnhancedIterable<A>- Parameters:
separator- the separator value- Returns:
- a
ImmutableIterable<A>
-
magnetizeBy
default ImmutableIterable<? extends ImmutableNonEmptyIterable<A>> magnetizeBy(com.jnape.palatable.lambda.functions.Fn2<A,A,java.lang.Boolean> predicate)
Returns anIterableof contiguous groups of elements in thisImmutableIterablethat match a predicate pairwise.- Specified by:
magnetizeByin interfaceEnhancedIterable<A>- Parameters:
predicate- the predicate function. This function should be referentially transparent and not perform side-effects. It may be called zero or more times for each element.- Returns:
- an
ImmutableIterable<ImmutableNonEmptyIterable<A>>containing the contiguous groups
-
partition
default <B,C> com.jnape.palatable.lambda.adt.hlist.Tuple2<? extends ImmutableIterable<B>,? extends ImmutableIterable<C>> partition(com.jnape.palatable.lambda.functions.Fn1<? super A,? extends com.jnape.palatable.lambda.adt.coproduct.CoProduct2<B,C,?>> function)
Partitions thisImmutableIterablegiven a disjoint mapping function.Note that while the returned tuple must be constructed eagerly, the left and right iterables contained therein are both lazy, so comprehension over infinite iterables is supported.
- Specified by:
partitionin interfaceEnhancedIterable<A>- Type Parameters:
B- the output left Iterable element type, as well as the CoProduct2 A typeC- the output right Iterable element type, as well as the CoProduct2 B type- Parameters:
function- the mapping function- Returns:
- a
Tuple2<ImmutableIterable<B>, ImmutableIterable<C>>
-
prepend
default ImmutableNonEmptyIterable<A> prepend(A element)
Lazily prepends an element to the front of thisImmutableIterable, yielding a newImmutableNonEmptyIterable.- Specified by:
prependin interfaceEnhancedIterable<A>- Parameters:
element- the element to prepend- Returns:
- an
ImmutableNonEmptyIterable<A>
-
prependAll
default ImmutableIterable<A> prependAll(A separator)
Returns a newImmutableIterablewith the provided separator value injected before each value of thisImmutableIterable.If this
ImmutableIterableis empty, it is left untouched.- Specified by:
prependAllin interfaceEnhancedIterable<A>- Parameters:
separator- the separator value- Returns:
- a
ImmutableIterable<A>
-
slide
default ImmutableIterable<? extends ImmutableNonEmptyFiniteIterable<A>> slide(int k)
"Slides" a window ofkelements across theImmutableIterableby one element at a time.Example:
ImmutableIterable.of(1, 2, 3, 4, 5).slide(2); // [[1, 2], [2, 3], [3, 4], [4, 5]]- Specified by:
slidein interfaceEnhancedIterable<A>- Parameters:
k- the number of elements in the sliding window. Must be >= 1.- Returns:
- an
ImmutableIterable<ImmutableNonEmptyFiniteIterable<A>>
-
span
default com.jnape.palatable.lambda.adt.hlist.Tuple2<? extends ImmutableIterable<A>,? extends ImmutableIterable<A>> span(com.jnape.palatable.lambda.functions.Fn1<? super A,? extends java.lang.Boolean> predicate)
Returns aTuple2where the first slot is the front contiguous elements of thisImmutableIterablematching a predicate and the second slot is all the remaining elements.- Specified by:
spanin interfaceEnhancedIterable<A>- Parameters:
predicate- a predicate; should be referentially transparent and not have side-effects- Returns:
- a
Tuple2<ImmutableIterable<B>, ImmutableIterable<C>>
-
tails
default ImmutableNonEmptyIterable<? extends ImmutableIterable<A>> tails()
Returns anImmutableNonEmptyIterablecontaining all of the subsequences of tail elements of thisImmutableIterable, ordered by size, starting with the full list. Example:ImmutableIterable.of(1, 2, 3).tails(); // [[1, 2, 3], [2, 3], [3], []]- Specified by:
tailsin interfaceEnhancedIterable<A>- Returns:
- an
ImmutableNonEmptyIterable<ImmutableIterable<A>>
-
take
default ImmutableFiniteIterable<A> take(int count)
Returns a newImmutableFiniteIterablethat takes the firstcountelements of thisImmutableIterable.- Specified by:
takein interfaceEnhancedIterable<A>- Parameters:
count- the number of elements to take from thisEnhancedIterable. Must be >= 0. May exceed size of thisImmutableIterable, in which case, the result will contain as many elements available.- Returns:
- an
ImmutableFiniteIterable<A>
-
takeWhile
default ImmutableIterable<A> takeWhile(com.jnape.palatable.lambda.functions.Fn1<? super A,? extends java.lang.Boolean> predicate)
Returns a newImmutableIterablethat limits to the first contiguous group of elements of thisFiniteIterablethat satisfy a predicate.Iteration ends at, but does not include, the first element for which the predicate evaluates to false.
- Specified by:
takeWhilein interfaceEnhancedIterable<A>- Parameters:
predicate- a predicate; should be referentially transparent and not have side-effects- Returns:
- a
ImmutableIterable<A>
-
toFinite
default com.jnape.palatable.lambda.adt.Maybe<? extends ImmutableFiniteIterable<A>> toFinite()
Converts thisImmutableIterableto anImmutableFiniteIterableif there is enough information to do so without iterating it.Note that if this method returns
nothing(), it does NOT necessarily mean thisImmutableIterableis infinite.- Specified by:
toFinitein interfaceEnhancedIterable<A>- Returns:
- a
Maybe<ImmutableFiniteIterable<A>
-
toNonEmpty
default com.jnape.palatable.lambda.adt.Maybe<? extends ImmutableNonEmptyIterable<A>> toNonEmpty()
Converts thisImmutableIterableto aImmutableNonEmptyIterableif it contains one or more elements.- Specified by:
toNonEmptyin interfaceEnhancedIterable<A>- Returns:
- a
Maybe<ImmutableNonEmptyIterable<A>
-
zipWith
default <B,C> ImmutableIterable<C> zipWith(com.jnape.palatable.lambda.functions.Fn2<A,B,C> fn, ImmutableIterable<B> other)
Zips together thisImmutableIterablewith anotherImmutableIterableby applying a zipping function.Applies the function to the successive elements of each
Iterableuntil one of them runs out of elements.- Type Parameters:
B- the element type of the otherIterableC- the element type of the result- Parameters:
fn- the zipping function. Not null. This function should be referentially transparent and not perform side-effects. It may be called zero or more times for each element.other- the otherIterable- Returns:
- an
ImmutableIterable<C>
-
zipWith
default <B,C> ImmutableFiniteIterable<C> zipWith(com.jnape.palatable.lambda.functions.Fn2<A,B,C> fn, ImmutableFiniteIterable<B> other)
Zips together thisImmutableIterablewith anImmutableFiniteIterableby applying a zipping function.Applies the function to the successive elements of each
Iterableuntil one of them runs out of elements.- Type Parameters:
B- the element type of the otherIterableC- the element type of the result- Parameters:
fn- the zipping function. Not null. This function should be referentially transparent and not perform side-effects. It may be called zero or more times for each element.other- the otherIterable- Returns:
- an
ImmutableFiniteIterable<C>
-
copyFrom
static <A> ImmutableFiniteIterable<A> copyFrom(FiniteIterable<A> source)
Creates anImmutableFiniteIterableby copying elements from aFiniteIterable.If
sourceis already anImmutableFiniteIterable, this method will return it without copying.- Type Parameters:
A- the element type- Parameters:
source- the source to copy from- Returns:
- an
ImmutableFiniteIterable<A>
-
copyFrom
static <A> ImmutableFiniteIterable<A> copyFrom(java.util.Collection<A> source)
Creates anImmutableFiniteIterableby copying elements from aCollection.- Type Parameters:
A- the element type- Parameters:
source- the source to copy from- Returns:
- an
ImmutableFiniteIterable<A>
-
copyFrom
static <A> ImmutableFiniteIterable<A> copyFrom(int maxCount, java.lang.Iterable<A> source)
Creates anImmutableFiniteIterableby copying elements from anIterable.If
sourceis already anImmutableIterable, no copying will be performed.- Type Parameters:
A- the element type- Parameters:
maxCount- the maximum number of elements to take from the suppliedIterable. Must be >= 0. May exceed size of theIterable, in which case, the result will contain as many elements available.source- the source to copy from- Returns:
- an
ImmutableFiniteIterable<A>
-
emptyImmutableIterable
static <A> ImmutableFiniteIterable<A> emptyImmutableIterable()
Creates an emptyImmutableIterable.- Type Parameters:
A- the element type- Returns:
- an
ImmutableFiniteIterable<A>
-
of
@SafeVarargs static <A> ImmutableNonEmptyFiniteIterable<A> of(A first, A... more)
Creates anImmutableIterablecontaining the given elements.Note that this method actually returns an
ImmutableNonEmptyFiniteIterable, which is also anImmutableIterable.- Type Parameters:
A- the element type- Parameters:
first- the first elementmore- the remaining elements- Returns:
- an
ImmutableNonEmptyFiniteIterable<A>
-
repeat
static <A> ImmutableNonEmptyIterable<A> repeat(A element)
Returns an infiniteImmutableNonEmptyIterablethat repeatedly iterates a given element.- Type Parameters:
A- the element type- Parameters:
element- the value to repeat- Returns:
- an
ImmutableNonEmptyIterable<A>
-
-