Skip to main content
List 扩展函数通过上下文调用语法 :: 使用,提供集合操作能力。

基础属性

方法说明
size()返回列表长度。
isEmpty()检查列表是否为空。
[1, 2, 3] :: size()       # => 3
[] :: isEmpty()           # => true
[1] :: isEmpty()          # => false

元素访问

方法说明
get(index)获取指定索引的元素。
first()获取第一个元素,空列表返回 null
last()获取最后一个元素,空列表返回 null
[1, 2, 3] :: get(0)       # => 1
[1, 2, 3] :: first()      # => 1
[1, 2, 3] :: last()       # => 3
[] :: first()             # => null
也可以使用索引访问语法:
list = [1, 2, 3]
&list[0]                  # => 1
&list[2]                  # => 3

元素修改(可变列表)

以下方法仅适用于可变列表:
方法说明
set(index, value)设置指定索引的元素。
add(value)在末尾添加元素。
add(index, value)在指定位置插入元素。
remove(index)移除指定索引的元素并返回。
removeElement(value)移除首个匹配的元素,返回是否成功。
clear()清空列表。
list = mutableList([1, 2, 3])
list :: add(4)            # list = [1, 2, 3, 4]
list :: set(0, 10)        # list = [10, 2, 3, 4]
list :: remove(1)         # => 2, list = [10, 3, 4]
list :: clear()           # list = []

查找与包含

方法说明
contains(element)检查是否包含指定元素。
indexOf(element)返回元素首次出现的索引,未找到返回 -1
lastIndexOf(element)返回元素最后一次出现的索引。
[1, 2, 3, 2] :: contains(2)      # => true
[1, 2, 3, 2] :: indexOf(2)       # => 1
[1, 2, 3, 2] :: lastIndexOf(2)   # => 3
[1, 2, 3] :: contains(5)         # => false

遍历与转换

方法说明
forEach(action)对每个元素执行操作。
map(transform)转换每个元素,返回新列表。
filter(predicate)过滤元素,返回满足条件的新列表。
reduce(initial, operation)将列表归约为单个值。
flatMap(transform)转换并展平结果。
[1, 2, 3] :: forEach(fn(x) { print(&x) })

# map 转换
[1, 2, 3] :: map(fn(x) { &x * 2 })        # => [2, 4, 6]

# filter 过滤
[1, 2, 3, 4, 5] :: filter(fn(x) { &x % 2 == 0 })  # => [2, 4]

# reduce 归约
[1, 2, 3, 4] :: reduce(0, fn(acc, x) { &acc + &x })  # => 10

# flatMap 展平
[[1, 2], [3, 4]] :: flatMap(fn(x) { &x })  # => [1, 2, 3, 4]

排序与反转

方法说明
sorted()返回排序后的新列表(自然顺序)。
sortedBy(selector)按指定键排序,返回新列表。
sortedDescending()返回降序排序后的新列表。
reversed()返回反转后的新列表。
[3, 1, 2] :: sorted()             # => [1, 2, 3]
[3, 1, 2] :: sortedDescending()   # => [3, 2, 1]
[1, 2, 3] :: reversed()           # => [3, 2, 1]

# 按属性排序
users :: sortedBy(fn(u) { &u.age })

切片与分组

方法说明
take(n)取前 n 个元素。
drop(n)跳过前 n 个元素。
slice(from, to)切片(左闭右开)。
chunked(size)按指定大小分组。
distinct()去重,返回新列表。
[1, 2, 3, 4, 5] :: take(3)        # => [1, 2, 3]
[1, 2, 3, 4, 5] :: drop(2)        # => [3, 4, 5]
[1, 2, 3, 4, 5] :: slice(1, 4)    # => [2, 3, 4]
[1, 2, 3, 4, 5] :: chunked(2)     # => [[1, 2], [3, 4], [5]]
[1, 2, 2, 3, 3] :: distinct()     # => [1, 2, 3]

聚合

方法说明
sum()数值列表求和。
average()数值列表求平均值。
min()返回最小元素。
max()返回最大元素。
count(predicate)统计满足条件的元素数量。
[1, 2, 3, 4, 5] :: sum()          # => 15
[1, 2, 3, 4, 5] :: average()      # => 3.0
[3, 1, 4, 1, 5] :: min()          # => 1
[3, 1, 4, 1, 5] :: max()          # => 5
[1, 2, 3, 4, 5] :: count(fn(x) { &x > 2 })  # => 3

条件检查

方法说明
any(predicate)检查是否有任意元素满足条件。
all(predicate)检查是否所有元素都满足条件。
none(predicate)检查是否没有元素满足条件。
[1, 2, 3] :: any(fn(x) { &x > 2 })   # => true
[1, 2, 3] :: all(fn(x) { &x > 0 })   # => true
[1, 2, 3] :: none(fn(x) { &x < 0 })  # => true

连接

方法说明
join()将元素连接为字符串。
join(separator)使用指定分隔符连接。
join(separator, prefix, postfix)使用分隔符、前缀、后缀连接。
[1, 2, 3] :: join()               # => "123"
[1, 2, 3] :: join(", ")           # => "1, 2, 3"
[1, 2, 3] :: join(", ", "[", "]") # => "[1, 2, 3]"

相关链接