type
List
src
@Serializable
class List : Obj
List represents a linear sequence of Objects indexed by an Int.
See examples.
constructors
make |
Constructor for of[] with initial capacity. |
---|---|
makeObj |
Constructor for Obj?[] with initial capacity. |
fields
capacity |
The number of items this list can hold without allocating more memory. |
---|---|
size |
The number of items in the list. |
methods
add |
Add the specified item to the end of the list. |
---|---|
addAll |
Add all the items in the specified list to the end of this list. |
addIfNotNull |
Deprecated - use addNotNull |
addNotNull |
Call |
all |
Return true if c returns true for all of the items in the list. |
any |
Return true if c returns true for any of the items in the list. |
binaryFind |
Find an element in the list using a binary search algorithm. |
binarySearch |
Search the list for the index of the specified key using a binary search algorithm. |
clear |
Remove all items from the list and set size to 0. |
contains |
Return if this list contains the specified item. |
containsAll |
Return if this list contains every item in the specified list. |
containsAny |
Return if this list contains any one of the items in the specified list. |
containsSame |
Return if this list contains the specified item. |
dup |
Create a shallow duplicate copy of this List. |
each |
Call the specified function for every item in the list starting with index 0 and incrementing up to size-1. |
eachNotNull |
Call the specified function for every non-null item in the list starting with index 0 and incrementing up to size-1. |
eachRange |
Iterate the list using the specified range. |
eachWhile |
Iterate every item in the list starting with index 0 up to size-1 until the function returns non-null. |
eachr |
Reverse each - call the specified function for every item in the list starting with index size-1 and decrementing down to 0. |
eachrWhile |
Reverse |
equals |
Two Lists are equal if they have the same type, the same number of items, and all the items at each index return true for |
exclude |
Return a new list containing the items for which c returns false. |
fill |
Append a value to the end of the list the given number of times. |
find |
Return the first item in the list for which c returns true. |
findAll |
Return a new list containing the items for which c returns true. |
findIndex |
Return the index of the first item in the list for which c returns true. |
findNotNull |
Return a new list with all null items removed. |
findType |
Return a new list containing all the items which are an instance of the specified type such that item.type.fits(t) is true. |
first |
Return the item at index 0, or if empty return null. |
flatMap | |
flatten |
Return a new list which recursively flattens any list items into a one-dimensional result. |
get |
Get is used to return the item at the specified index. |
getRange |
Return a sub-list based on the specified range. |
getSafe |
Get the item at the specified index, but if index is out of range, then return |
groupBy |
Group items into buckets keyed by the given function. |
groupByInto |
Group by into an existing map. |
hash |
Return platform dependent hashcode based on a hash of the items of the list. |
index |
Return the integer index of the specified item using the |
indexSame |
Return integer index just like |
indexr |
Reverse index lookup. |
insert |
Insert the item at the specified index. |
insertAll |
Insert all the items in the specified list into this list at the specified index. |
intersection |
Return a new list which is the intersection of this list and the given list. |
isEmpty |
Return if size == 0. |
isRO |
Return if this List is readonly. |
isRW |
Return if this List is read-write. |
join |
Return a string by concatenating each item's toStr result using the specified separator string. |
last |
Return the item at size-1, or if empty return null. |
map |
Create a new list which is the result of calling c for every item in this list. |
mapNotNull |
Convenience for |
max |
Return the maximum value of the list. |
min |
Return the minimum value of the list. |
moveTo |
Find the given item, and move it to the given index. |
of |
Get the item Type of this List. |
peek |
Return the item at size-1, or if empty return null. |
pop |
Remove the last item and return it, or return null if the list is empty. |
push |
Add the specified item to the end of the list. |
random |
Return a random item from the list. |
reduce |
Reduce is used to iterate through every item in the list to reduce the list into a single value called the reduction. |
remove |
Remove the specified value from the list. |
removeAll |
Remove every item in this list which is found in the |
removeAt |
Remove the object at the specified index. |
removeRange |
Remove a range of indices from this list. |
removeSame |
Remove the item just like |
reverse |
Reverse the order of the items of this list in-place. |
ro |
Get a readonly List instance with the same contents as this List (although the items may be mutable themselves). |
rw |
Get a read-write, mutable List instance with the same contents as this List. |
set |
Set is used to overwrite the item at the specified index. |
shuffle |
Shuffle this list's items into a randomized order. |
sort |
Perform an in-place sort on this list. |
sortr |
Reverse sort - perform an in-place reverse sort on this list. |
swap |
Swap the items at the two specified indexes. |
toCode |
Get this list as a Fantom expression suitable for code generation. |
toStr |
Return a string representation of the list. |
trim |
Trim the capacity such that the underlying storage is optimized for the current size. |
union |
Return a new list which is the union of this list and the given list. |
unique |
Returns a new list with all duplicate items removed such that the resulting list is a proper set. |
Slot Details
add
addAll
src
L addAll(L list)
Add all the items in the specified list to the end of this list. Size is incremented by list.size. Return this. Throw ReadonlyErr if readonly.
addIfNotNull
src
@Deprecated { msg="Use addNotNull" }
L addIfNotNull(V? item)
Deprecated - use addNotNull
addNotNull
all
Return true if c returns true for all of the items in the list. If the list is empty, return true. This method is readonly safe.
Example:
list := ["ant", "bear"] list.all |Str v->Bool| { return v.size >= 3 } => true list.all |Str v->Bool| { return v.size >= 4 } => false
any
Return true if c returns true for any of the items in the list. If the list is empty, return false. This method is readonly safe.
Example:
list := ["ant", "bear"] list.any |Str v->Bool| { return v.size >= 4 } => true list.any |Str v->Bool| { return v.size >= 5 } => false
binaryFind
src
Int binaryFind(|V,Int->Int| c)
Find an element in the list using a binary search algorithm. The specified comparator function returns a negative integer, zero, or a positive integer if the desired object is less than, equal to, or greater than specified item. The list must be sorted in ascending order according to the specified comparator function. If the key is not found, then return a negative value which is -(insertation point) - 1
.
Example:
[1,3,5,7,9].binaryFind |Int item->Int| { return 4 <=> item } => -3 [1,3,5,7,9].binaryFind |Int item->Int| { return 3 <=> item } => 1
binarySearch
src
Int binarySearch(V key, |V,V->Int|? c := null)
Search the list for the index of the specified key using a binary search algorithm. The list must be sorted in ascending order according to the specified comparator function. If the list contains multiple matches for key, no guarantee is made to which one is returned. If the comparator is null then it is assumed to be the <=>
operator (shortcut for the compare
method). If the key is not found, then return a negative value which is -(insertation point) - 1
.
Example:
[1,3,5,7,9].binarySearch(4) => -3 [1,3,5,7,9].binarySearch(3) => 1
capacity
The number of items this list can hold without allocating more memory. Capacity is always greater or equal to size. If adding a large number of items, it may be more efficient to manually set capacity. See the trim
method to automatically set capacity to size. Throw ArgErr if attempting to set capacity less than size. Getting capacity is readonly safe, setting capacity throws ReadonlyErr if readonly.
clear
src
L clear()
Remove all items from the list and set size to 0. Return this. Throw ReadonlyErr if readonly.
contains
Return if this list contains the specified item. Equality is determined by Obj.equals
. This method is readonly safe.
containsAll
Return if this list contains every item in the specified list. Equality is determined by Obj.equals
. This method is readonly safe.
containsAny
Return if this list contains any one of the items in the specified list. Equality is determined by Obj.equals
. This method is readonly safe.
containsSame
dup
src
L dup()
Create a shallow duplicate copy of this List. The items themselves are not duplicated. The resulting list is always read/write. This method is readonly safe.
each
eachNotNull
eachRange
eachWhile
src
Obj? eachWhile(|V,Int->Obj?| c)
Iterate every item in the list starting with index 0 up to size-1 until the function returns non-null. If function returns non-null, then break the iteration and return the resulting object. Return null if the function returns null for every item. This method is readonly safe.
eachr
eachrWhile
equals
src
virtual override Bool equals(Obj? that)
Two Lists are equal if they have the same type, the same number of items, and all the items at each index return true for equals
.
Examples:
[2, 3] == [2, 3] => true [2, 3] == [3, 2] => false [2, 3] == Num[2, 3] => false Str[,] == [,] => false Str[,] == Str?[,] => false
exclude
src
L exclude(|V,Int->Bool| c)
Return a new list containing the items for which c returns false. If c returns true for every item, then return an empty list. The inverse of this method is findAll(). This method is readonly safe.
Example:
list := [0, 1, 2, 3, 4] list.exclude |Int v->Bool| { return v%2==0 } => [1, 3]
fill
find
Return the first item in the list for which c returns true. If c returns false for every item, then return null. This method is readonly safe.
Example:
list := [0, 1, 2, 3, 4] list.find |Int v->Bool| { return v.toStr == "3" } => 3 list.find |Int v->Bool| { return v.toStr == "7" } => null
findAll
src
L findAll(|V,Int->Bool| c)
Return a new list containing the items for which c returns true. If c returns false for every item, then return an empty list. The inverse of this method is exclude(). This method is readonly safe.
Example:
list := [0, 1, 2, 3, 4] list.findAll |Int v->Bool| { return v%2==0 } => [0, 2, 4]
findIndex
src
Int? findIndex(|V,Int->Bool| c)
Return the index of the first item in the list for which c returns true. If c returns false for every item, then return null. This method is readonly safe.
Example:
list := [5, 6, 7] list.findIndex |Int v->Bool| { return v.toStr == "7" } => 2 list.findIndex |Int v->Bool| { return v.toStr == "9" } => null
findNotNull
src
L findNotNull()
Return a new list with all null items removed. The returned list will be based on this list's type but non-nullable. This method is readonly safe.
Example:
list := Int?[1, null, 2, null, 3] list.findNotNull => Int[1, 2, 3]
findType
Return a new list containing all the items which are an instance of the specified type such that item.type.fits(t) is true. Any null items are automatically excluded. If none of the items is an instance of the specified type, then an empty list is returned. The returned list will be a list of t. This method is readonly safe.
Example:
list := ["a", 3, "foo", 5sec, null] list.findType(Str#) => Str["a", "foo"]
first
src
V? first()
Return the item at index 0, or if empty return null. This method is readonly safe.
flatMap
src
Obj?[] flatMap(|V,Int->Obj?[]| c)
This is a combination of map
and flatten
. Each item in this list is mapped to zero or more new items by the given function and the results are returned in a single flattened list. Note unlike flatten
only one level of flattening is performed. The new list is typed based on the return type of c. This method is readonly safe.
Example:
list := ["a", "b"] list.flatMap |v->Str[]| { [v, v.upper] } => ["a", "A", "b", "B"]
flatten
get
src
@Operator
V get(Int index)
Get is used to return the item at the specified index. A negative index may be used to access an index from the end of the list. For example get(-1) is translated into get(size()-1). The get method is accessed via the [] shortcut operator. Throw IndexErr if index is out of range. This method is readonly safe.
getRange
src
@Operator
L getRange(Range range)
Return a sub-list based on the specified range. Negative indexes may be used to access from the end of the list. This method is accessed via the []
operator. This method is readonly safe. Throw IndexErr if range illegal.
Examples:
list := [0, 1, 2, 3] list[0..2] => [0, 1, 2] list[3..3] => [3] list[-2..-1] => [2, 3] list[0..<2] => [0, 1] list[1..-2] => [1, 2]
getSafe
groupBy
src
Obj:L groupBy(|V,Int->Obj| c)
Group items into buckets keyed by the given function. The result is a map of lists where the map keys are generated by the given function. The map values are the items which share the same key. The resulting map key type is determined by the return type of c.
Example:
// group by string size list := ["ape", "bear", "cat", "deer"] list.groupBy |s->Int| { s.size } => [3:[ape, cat], 4:[bear, deer]]
groupByInto
hash
index
src
Int? index(V item, Int offset := 0)
Return the integer index of the specified item using the ==
operator (shortcut for equals method) to check for equality. Use indexSame
to find with ===
operator. The search starts at the specified offset and returns the first match. The offset may be negative to access from end of list. Throw IndexErr if offset is out of range. If the item is not found return null. This method is readonly safe.
indexSame
src
Int? indexSame(V item, Int offset := 0)
Return integer index just like List.index
except use ===
same operator instead of the ==
equals operator.
indexr
insert
insertAll
src
L insertAll(Int index, L list)
Insert all the items in the specified list into this list at the specified index. A negative index may be used to access an index from the end of the list. Size is incremented by list.size. Return this. Throw IndexErr if index is out of range. Throw ReadonlyErr if readonly.
intersection
src
L intersection(L that)
Return a new list which is the intersection of this list and the given list. The intersection is defined as the unique items which are in both lists. The new list will be ordered according to this list's order. The new list is guaranteed to be unique with no duplicate values. Equality is determined using hash() and the == operator (shortcut for equals method). This method is readonly safe.
Example:
[0, 1, 2, 3].intersection([5, 3, 1]) => [1, 3] [0, null, 2].intersection([null, 0, 1, 2, 3]) => [0, null, 2]
isEmpty
isRO
Return if this List is readonly. A readonly List is guaranteed to be immutable (although its items may be mutable themselves). Any attempt to modify a readonly List will result in ReadonlyErr. Use rw
to get a read-write List from a readonly List. Methods documented as "readonly safe" may be used safely with a readonly List. This method is readonly safe.
isRW
join
src
Str join(Str separator := "", |V,Int->Str|? c := null)
Return a string by concatenating each item's toStr result using the specified separator string. If c is non-null then it is used to format each item into a string, otherwise Obj.toStr is used. This method is readonly safe.
Example:
["a", "b", "c"].join => "abc" ["a", "b", "c"].join("-") => "a-b-c" ["a", "b", "c"].join("-") |Str s->Str| { return "($s)" } => "(a)-(b)-(c)"
last
src
V? last()
Return the item at size-1, or if empty return null. This method is readonly safe.
make
makeObj
map
mapNotNull
src
Obj[] mapNotNull(|V,Int->Obj?| c)
Convenience for map
and findNotNull
. Each item is mapped by the given function and if null is returned it is excluded from the result. The resulting type is based on the return type of c but non-nullable. This method is readonly safe.
Example:
list := [3, 4, 5] list.mapIfNotNull |Int v->Int?| { v.isOdd ? 10+v : null } => [13, 15]
max
src
V? max(|V,V->Int|? c := null)
Return the maximum value of the list. If c is provided, then it implements the comparator returning -1, 0, or 1. If c is null then the <=> operator is used (shortcut for compare method). If the list is empty, return null. This method is readonly safe.
Example:
list := ["albatross", "dog", "horse"] list.max => "horse" list.max |Str a, Str b->Int| { return a.size <=> b.size } => "albatross"
min
src
V? min(|V,V->Int|? c := null)
Return the minimum value of the list. If c is provided, then it implements the comparator returning -1, 0, or 1. If c is null then the <=> operator is used (shortcut for compare method). If the list is empty, return null. This method is readonly safe.
Example:
list := ["albatross", "dog", "horse"] list.min => "albatross" list.min |Str a, Str b->Int| { return a.size <=> b.size } => "dog"
moveTo
src
L moveTo(V? item, Int toIndex)
Find the given item, and move it to the given index. All the other items are shifted accordingly. Negative indexes may used to access an index from the end of the list. If the item is null or not found then this is a no op. Return this. Throw ReadonlyErr if readonly.
Examples:
[10, 11, 12].moveTo(11, 0) => [11, 10, 12] [10, 11, 12].moveTo(11, -1) => [10, 12, 11]
of
peek
src
V? peek()
Return the item at size-1, or if empty return null. This method has the same semantics as last(). This method is readonly safe.
pop
src
V? pop()
Remove the last item and return it, or return null if the list is empty. This method has the same semantics as removeAt(-1)
, with the exception that an empty list is handled. Throw ReadonlyErr if readonly.
push
src
L push(V item)
Add the specified item to the end of the list. Return this. This method has the same semantics as add(item). Throw ReadonlyErr if readonly.
random
src
V? random()
Return a random item from the list. If the list is empty return null. This method is readonly safe. Also see Int.random
, Float.random
, Range.random
, and Random
.
reduce
src
Obj? reduce(Obj? init, |Obj?,V,Int->Obj?| c)
Reduce is used to iterate through every item in the list to reduce the list into a single value called the reduction. The initial value of the reduction is passed in as the init parameter, then passed back to the closure along with each item. This method is readonly safe.
Example:
list := [1, 2, 3] list.reduce(0) |Obj r, Int v->Obj| { return (Int)r + v } => 6
remove
src
V? remove(V item)
Remove the specified value from the list. The value is compared using the == operator (shortcut for equals method). Use removeSame
to remove with the === operator. Return the removed value and decrement size by 1. If the value is not found, then return null. Throw ReadonlyErr if readonly.
removeAll
removeAt
removeRange
removeSame
reverse
src
L reverse()
Reverse the order of the items of this list in-place. Return this. Throw ReadonlyErr if readonly.
Example:
[1, 2, 3, 4].reverse => [4, 3, 2, 1]
ro
src
L ro()
Get a readonly List instance with the same contents as this List (although the items may be mutable themselves). If this List is already readonly, then return this. Only methods documented as "readonly safe" may be used safely with a readonly List, all others will throw ReadonlyErr. This method is readonly safe. See Obj.isImmutable
and Obj.toImmutable
for deep immutability.
rw
src
L rw()
Get a read-write, mutable List instance with the same contents as this List. If this List is already read-write, then return this. This method is readonly safe.
set
src
@Operator
L set(Int index, V item)
Set is used to overwrite the item at the specified index. A negative index may be used to access an index from the end of the list. The set method is accessed via the []= shortcut operator. If you wish to use List as a sparse array and set values greater then size, then manually set size larger. Return this. Throw IndexErr if index is out of range. Throw ReadonlyErr if readonly.
shuffle
src
L shuffle()
Shuffle this list's items into a randomized order. Return this. Throw ReadonlyErr if readonly.
size
The number of items in the list. Getting size is readonly safe, setting size throws ReadonlyErr if readonly.
If the size is set greater than the current size then the list is automatically grown to be a sparse list with new items defaulting to null. However if this is a non-nullable list, then growing a list will throw ArgErr.
If the size is set less than the current size then any items with indices past the new size are automatically removed. Changing size automatically allocates new storage so that capacity exactly matches the new size.
sort
src
L sort(|V,V->Int|? c := null)
Perform an in-place sort on this list. If a method is provided it implements the comparator returning -1, 0, or 1. If the comparator method is null then sorting is based on the value's <=> operator (shortcut for compare
method). Return this. Throw ReadonlyErr if readonly.
Example:
s := ["candy", "ate", "he"] s.sort // s now evaluates to [ate, candy, he] s.sort |Str a, Str b->Int| { return a.size <=> b.size } // s now evaluates to ["he", "ate", "candy"]
sortr
src
L sortr(|V,V->Int|? c := null)
Reverse sort - perform an in-place reverse sort on this list. If a method is provided it implements the comparator returning -1, 0, or 1. If the comparator method is null then sorting is based on the value's <=> operator (shortcut for compare
method). Return this. Throw ReadonlyErr if readonly.
Example:
[3, 2, 4, 1].sortr => [4, 3, 2, 1]
swap
toCode
toStr
trim
src
L trim()
Trim the capacity such that the underlying storage is optimized for the current size. Return this. Throw ReadonlyErr if readonly.
union
src
L union(L that)
Return a new list which is the union of this list and the given list. The union is defined as the unique items which are in either list. The resulting list is ordered first by this list's order, and secondarily by that's order. The new list is guaranteed to be unique with no duplicate values. Equality is determined using hash() and the == operator (shortcut for equals method). This method is readonly safe.
Example:
[1, 2].union([3, 2]) => [1, 2, 3]
unique
src
L unique()
Returns a new list with all duplicate items removed such that the resulting list is a proper set. Duplicates are detected using hash() and the == operator (shortcut for equals method). This method is readonly safe.
Example:
["a", "a", "b", "c", "b", "b"].unique => ["a", "b", "c"]