summaryrefslogtreecommitdiff
path: root/base/src/main/java/bjc/utils/funcdata
diff options
context:
space:
mode:
Diffstat (limited to 'base/src/main/java/bjc/utils/funcdata')
-rw-r--r--base/src/main/java/bjc/utils/funcdata/FunctionalList.java15
-rw-r--r--base/src/main/java/bjc/utils/funcdata/IList.java112
2 files changed, 76 insertions, 51 deletions
diff --git a/base/src/main/java/bjc/utils/funcdata/FunctionalList.java b/base/src/main/java/bjc/utils/funcdata/FunctionalList.java
index 6953bd0..b988588 100644
--- a/base/src/main/java/bjc/utils/funcdata/FunctionalList.java
+++ b/base/src/main/java/bjc/utils/funcdata/FunctionalList.java
@@ -54,7 +54,20 @@ public class FunctionalList<E> implements Cloneable, IList<E> {
wrapped.add(item);
}
}
-
+
+ /**
+ * Create a new functional list containing the specified items.
+ *
+ * Takes O(n) time, where n is the number of items specified
+ *
+ * @param items
+ * The items to put into this functional list.
+ * @return The returned list.
+ */
+ @SafeVarargs
+ public static <T> IList<T> listOf(final T... items) {
+ return new FunctionalList<>(items);
+ }
/**
* Create a new functional list with the specified size.
*
diff --git a/base/src/main/java/bjc/utils/funcdata/IList.java b/base/src/main/java/bjc/utils/funcdata/IList.java
index 12eaf2f..c2f247b 100644
--- a/base/src/main/java/bjc/utils/funcdata/IList.java
+++ b/base/src/main/java/bjc/utils/funcdata/IList.java
@@ -18,14 +18,14 @@ import bjc.utils.functypes.ID;
* @author ben
*
* @param <ContainedType>
- * The type in this list
+ * The type in this list
*/
public interface IList<ContainedType> extends Iterable<ContainedType> {
/**
* Add an item to this list.
*
* @param item
- * The item to add to this list.
+ * The item to add to this list.
*
* @return Whether the item was added to the list successfully..
*/
@@ -35,7 +35,7 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Add all of the elements in the provided list to this list.
*
* @param items
- * The list of items to add.
+ * The list of items to add.
*
* @return True if every item was successfully added to the list, false
* otherwise.
@@ -48,7 +48,7 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Add all of the elements in the provided array to this list.
*
* @param items
- * The array of items to add.
+ * The array of items to add.
*
* @return True if every item was successfully added to the list, false
* otherwise.
@@ -57,7 +57,7 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
default boolean addAll(final ContainedType... items) {
boolean succ = true;
- for(final ContainedType item : items) {
+ for (final ContainedType item : items) {
final boolean addSucc = add(item);
succ = succ ? addSucc : false;
@@ -71,7 +71,7 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* predicate.
*
* @param matcher
- * The predicate to use for checking.
+ * The predicate to use for checking.
*
* @return Whether all of the elements of the list match the specified
* predicate.
@@ -82,7 +82,7 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Check if any of the elements in this list match the specified list.
*
* @param matcher
- * The predicate to use for checking.
+ * The predicate to use for checking.
*
* @return Whether any element in the list matches the provided
* predicate.
@@ -93,13 +93,13 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Reduce the contents of this list using a collector.
*
* @param <StateType>
- * The intermediate accumulation type.
+ * The intermediate accumulation type.
*
* @param <ReducedType>
- * The final, reduced type.
+ * The final, reduced type.
*
* @param collector
- * The collector to use for reduction.
+ * The collector to use for reduction.
*
* @return The reduced list.
*/
@@ -126,16 +126,16 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* list and the combined one.
*
* @param <OtherType>
- * The type of the second list.
+ * The type of the second list.
*
* @param <CombinedType>
- * The type of the combined list.
+ * The type of the combined list.
*
* @param list
- * The list to combine with.
+ * The list to combine with.
*
* @param combiner
- * The function to use for combining element pairs.
+ * The function to use for combining element pairs.
*
* @return A new list containing the merged pairs of lists.
*/
@@ -146,7 +146,7 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Check if the list contains the specified item.
*
* @param item
- * The item to see if it is contained.
+ * The item to see if it is contained.
*
* @return Whether or not the specified item is in the list.
*/
@@ -166,7 +166,18 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
*/
ContainedType last();
+ /**
+ * Remove and return the first element from the list.
+ *
+ * @return The first element from the list.
+ */
ContainedType popFirst();
+
+ /**
+ * Remove and return the last element from the list.
+ *
+ * @return The last element from the list.
+ */
ContainedType popLast();
/**
@@ -176,10 +187,10 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Does not change the underlying list.
*
* @param <MappedType>
- * The type of the flattened list.
+ * The type of the flattened list.
*
* @param expander
- * The function to apply to each member of the list.
+ * The function to apply to each member of the list.
*
* @return A new list containing the flattened results of applying the
* provided function.
@@ -190,7 +201,7 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Apply a given action for each member of the list.
*
* @param action
- * The action to apply to each member of the list.
+ * The action to apply to each member of the list.
*/
@Override
void forEach(Consumer<? super ContainedType> action);
@@ -199,8 +210,8 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Apply a given function to each element in the list and its index.
*
* @param action
- * The function to apply to each element in the list and its
- * index.
+ * The function to apply to each element in the list and
+ * its index.
*/
void forEachIndexed(BiConsumer<Integer, ContainedType> action);
@@ -208,7 +219,7 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Retrieve a value in the list by its index.
*
* @param index
- * The index to retrieve a value from.
+ * The index to retrieve a value from.
*
* @return The value at the specified index in the list.
*/
@@ -218,7 +229,7 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Retrieve a list containing all elements matching a predicate.
*
* @param predicate
- * The predicate to match by.
+ * The predicate to match by.
*
* @return A list containing all elements that match the predicate.
*/
@@ -245,10 +256,10 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Does not change the underlying list.
*
* @param <MappedType>
- * The type of the transformed list.
+ * The type of the transformed list.
*
* @param transformer
- * The function to apply to each element in the list.
+ * The function to apply to each element in the list.
*
* @return A new list containing the mapped elements of this list.
*/
@@ -258,10 +269,10 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Zip two lists into a list of pairs.
*
* @param <OtherType>
- * The type of the second list.
+ * The type of the second list.
*
* @param list
- * The list to use as the left side of the pair.
+ * The list to use as the left side of the pair.
*
* @return A list containing pairs of this element and the specified
* list.
@@ -272,7 +283,8 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Partition this list into a list of sublists.
*
* @param partitionSize
- * The size of elements to put into each one of the sublists.
+ * The size of elements to put into each one of the
+ * sublists.
*
* @return A list partitioned into partitions of size partitionSize. The
* last partition may not be completely full if the size of the
@@ -284,7 +296,7 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Prepend an item to the list.
*
* @param item
- * The item to prepend to the list.
+ * The item to prepend to the list.
*/
void prepend(ContainedType item);
@@ -292,11 +304,11 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Prepend an array of items to the list.
*
* @param items
- * The items to prepend to the list.
+ * The items to prepend to the list.
*/
@SuppressWarnings("unchecked")
default void prependAll(final ContainedType... items) {
- for(final ContainedType item : items) {
+ for (final ContainedType item : items) {
prepend(item);
}
}
@@ -316,7 +328,7 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* generator.
*
* @param rnd
- * The random number generator to use.
+ * The random number generator to use.
*
* @return A random element from this list.
*/
@@ -326,21 +338,21 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Reduce this list to a single value, using a accumulative approach.
*
* @param <StateType>
- * The in-between type of the values
+ * The in-between type of the values
*
* @param <ReducedType>
- * The final value type
+ * The final value type
*
* @param initial
- * The initial value of the accumulative state.
+ * The initial value of the accumulative state.
*
* @param accumulator
- * The function to use to combine a list element with the
- * accumulative state.
+ * The function to use to combine a list element with the
+ * accumulative state.
*
* @param transformer
- * The function to use to convert the accumulative state into a
- * final result.
+ * The function to use to convert the accumulative state
+ * into a final result.
*
* @return A single value condensed from this list and transformed into
* its final state.
@@ -353,14 +365,14 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Reduce this list to a single value, using a accumulative approach.
*
* @param <StateType>
- * The in-between type of the values.
+ * The in-between type of the values.
*
* @param initial
- * The initial value of the accumulative state.
+ * The initial value of the accumulative state.
*
* @param accumulator
- * The function to use to combine a list element with the
- * accumulative state.
+ * The function to use to combine a list element with the
+ * accumulative state.
*
* @return A single value condensed from this list.
*/
@@ -373,7 +385,7 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Remove all elements that match a given predicate.
*
* @param predicate
- * The predicate to use to determine elements to delete.
+ * The predicate to use to determine elements to delete.
*
* @return Whether there was anything that satisfied the predicate.
*/
@@ -383,7 +395,7 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Remove all parameters that match a given parameter.
*
* @param element
- * The object to remove all matching copies of.
+ * The object to remove all matching copies of.
*/
void removeMatching(ContainedType element);
@@ -398,11 +410,11 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* hand.
*
* @param key
- * The key to search for.
+ * The key to search for.
*
* @param comparator
- * The way to compare elements for searching. Pass null to use
- * the natural ordering for E.
+ * The way to compare elements for searching. Pass null
+ * to use the natural ordering for E.
*
* @return The element if it is in this list, or null if it is not.
*/
@@ -415,8 +427,8 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Does change the underlying list.
*
* @param comparator
- * The way to compare elements for sorting. Pass null to use E's
- * natural ordering
+ * The way to compare elements for sorting. Pass null to
+ * use E's natural ordering
*/
void sort(Comparator<ContainedType> comparator);
@@ -431,7 +443,7 @@ public interface IList<ContainedType> extends Iterable<ContainedType> {
* Convert this list into an array.
*
* @param type
- * The type of array to return.
+ * The type of array to return.
*
* @return The list, as an array.
*/