在kotlin中數(shù)組和list的操作符基本共同拘泞,所以在數(shù)組中可用的操作符也可以在list中使用。
1摩泪、統(tǒng)計(jì)操作符
- any 只要有一個符合就返回true
- all 所有條件符合才返回true
- count 返回符合條件的數(shù)目
- none 如果沒有任何元素與給定的函數(shù)匹配族购,則返回true
- max 返回最大值
- min 返回最小值
- fold 在一個初始值的基礎(chǔ)上 從第一項(xiàng)到最后一項(xiàng)通過 一個函數(shù)操作 所有的元素
- reduce 從第一項(xiàng)到最后一項(xiàng)通過 一個函數(shù)操作 所有的元素旁瘫,相對于fold,沒有初始值
- sum 求數(shù)組中所有值的和
val array = arrayOf(1, 2, 3, 4, 5, 6, 7)
println("any,數(shù)組中有值等于7非竿,${array.any { it == 7 }}")
println("all,數(shù)組中是否所有值都大于3蜕着,${array.all { it > 3 }}")
println("count,數(shù)組中大于5的值有幾個,${array.count { it > 5 }}")
println("none,數(shù)組中沒有大于9的數(shù),${array.none { it > 9 }}")
println("max,數(shù)組中的最大值承匣,${array.max()}")
println("min,數(shù)組中的最小值蓖乘,${array.min()}")
println("fold操作符的例子,${array.fold(4) { returnValue, next -> returnValue + next }}")
//相對于fold操作符韧骗,相當(dāng)于返回值的初始值為0
println("reduce操作符的例子嘉抒,${array.reduce { returnValue, next -> returnValue + next }}")
println("sum,求數(shù)組中所有值的總和(也可以用 fold和reduce操作實(shí)現(xiàn)),${array.sum()}")
any,數(shù)組中有值等于7袍暴,true
all,數(shù)組中是否所有值都大于3些侍,false
count,數(shù)組中大于5的值有幾個,2
none,數(shù)組中沒有大于9的數(shù)政模,true
max,數(shù)組中的最大值岗宣,7
min,數(shù)組中的最小值,1
fold操作符的例子淋样,32
reduce操作符的例子耗式,28
sum,求數(shù)組中所有值的總和(也可以用 fold和reduce操作實(shí)現(xiàn)),28
2趁猴、元素操作符
- contains,數(shù)組中是否包含某個元素
- first,返回第一個滿足給定條件的元素
- firstOrNull,報錯要判空處理刊咳;
- last,返回最后一個滿足給定條件的元素
- indexOf,返回某個值在數(shù)組中的下標(biāo)值
- elementAt,返回數(shù)組中某個下標(biāo)的值
- single,返回數(shù)組中的滿足條件的一個元素,如果沒有或者滿足條件的有多個就拋出異常
- find,找到第一個符合條件的值并返回
val array = arrayOf(1, 2, 3, 4, 5, 6, 7)
println("* contains,數(shù)組中是否包含值為5的元素躲叼,${array.contains(5)}")
println("* first,返回第一個滿足給定條件的元素,大于3的條件芦缰,${array.first { it > 3 }}")
println("* last,返回最后一個滿足給定條件的元素,大于5的條件枫慷,${array.last { it > 5 }}")
println("* indexOf,返回值為3在數(shù)組中的下標(biāo)值让蕾,${array.indexOf(3)}")
println("* elementAt,返回數(shù)組中下標(biāo)為2的值,${array.elementAt(2)}")
println("* single,返回數(shù)組中的滿足條件的一個元素或听,如果沒有或者滿足條件的有多個就拋出異常探孝,${array.single{it >6}}")
println("* find,數(shù)組中的元素值,${array.find { it==7 }}")
contains,數(shù)組中是否包含值為5的元素誉裆,true
first,返回第一個滿足給定條件的元素,大于3的條件顿颅,4
last,返回最后一個滿足給定條件的元素,大于5的條件足丢,7
indexOf,返回值為3在數(shù)組中的下標(biāo)值粱腻,2
elementAt,返回數(shù)組中下標(biāo)為2的值,3
single,返回數(shù)組中的滿足條件的一個元素斩跌,如果沒有或者滿足條件的有多個就拋出異常绍些,7
find,數(shù)組中的元素值,7
3耀鸦、順序操作符
- reversed柬批,返回一個具有相反順序的數(shù)組
- sorted啸澡,返回一個升序的排序的數(shù)組
- sortedDescending,返回一個降序排序的數(shù)組
- sortedBy氮帐,根據(jù)指定的值進(jìn)行升序排序
- sortedByDescending嗅虏,根據(jù)指定的值進(jìn)行降序排序
fun <T> Array<T>.toString1(): String {
val sb = StringBuilder("[")
for ((index, value) in this.withIndex()) {
sb.append(value)
sb.append(",")
}
sb.delete(sb.length - 1, sb.length)
sb.append("]")
return sb.toString()
}
data class Person(val age: Int, val weight: Int){
override fun toString(): String {
return "{$age,$weight}"
}
}
fun main() {
val array = arrayOf(1, 2, 5, 4, 3, 6, 7)
println("reversed,返回一個具有相反順序的數(shù)組${array.reversed()}")
println("sorted上沐,返回一個升序的排序的數(shù)組皮服,${array.sorted()}")
println("sortedDescending,返回一個降序排序的數(shù)組${array.sortDescending()}")
val persons = arrayOf(Person(18, 45), Person(16, 50), Person(22, 48))
persons.sortBy { it.age }
println("sortedBy奄容,根據(jù)指定的值進(jìn)行升序排序冰更,${persons.toString1()}")
persons.sortByDescending { it.weight }
println("sortedByDescending,根據(jù)指定的值進(jìn)行降序排序昂勒,${persons.toString1()}")
}
reversed蜀细,返回一個具有相反順序的數(shù)組[7, 6, 3, 4, 5, 2, 1]
sorted,返回一個升序的排序的數(shù)組戈盈,[1, 2, 3, 4, 5, 6, 7]
sortedDescending奠衔,返回一個降序排序的數(shù)組kotlin.Unit
sortedBy,根據(jù)指定的值進(jìn)行升序排序塘娶,[{16,50},{18,45},{22,48}]
sortedByDescending归斤,根據(jù)指定的值進(jìn)行降序排序,[{16,50},{22,48},{18,45}]
4刁岸、映射操作符
- map脏里,返回一個列表,其中包含將給定 函數(shù) 應(yīng)用于原始數(shù)組中每個元素的結(jié)果.
- flatMap虹曙,返回在原始數(shù)組的每個元素上調(diào)用 函數(shù) 的結(jié)果迫横,所產(chǎn)生的所有元素的單個列表。(flatMap的傳入函數(shù)的返回必須是可迭代的 Iterable)酝碳,flatMap的主要主要就是把多層的集合平鋪成一層的矾踱。
- flatten,返回給定集合中所有集合的所有元素的單個列表疏哗,相當(dāng)于flatmap中的函數(shù)不對元素進(jìn)行任何操作
- groupBy 按照給定的元素進(jìn)行分組呛讲,返回的是一個map
val array = arrayOf(1, 2, 5, 4, 3, 6, 7)
println("map1: ${array.map { it % 2 == 0 }}")
println("map2: ${array.map { it + 3 }}")
val array1 = mutableListOf(mutableListOf(1, 5, 9),mutableListOf(11, 40, 21), mutableListOf(3, 15, 10), mutableListOf(6, 8, 10))
println("array1 = $array1")
//平鋪array1中的數(shù)據(jù) 并過濾掉 大于等于10的數(shù)據(jù)
println("flatMap: ${array1.flatMap { it -> it.filter { it < 10 } }}")
println("flatten: ${array1.flatten()}")
val persons = arrayOf(Person(16,45,"小紅"),Person(16,50,"小綠"),Person(18,45,"小紫"),Person(18,50,"小藍(lán)"))
println("groupBy_age: ${persons.groupBy{it.age}}")
println("groupBy_weight: ${persons.groupBy{it.weight}}")
//通過應(yīng)用到元素*的給定[keySelector]函數(shù)返回的鍵,將應(yīng)用于原始數(shù)組*的[valueTransform]函數(shù)返回的值分組返奉,
// 并返回一個映射贝搁,其中每個組鍵與對應(yīng)值列表相關(guān)聯(lián)。 * *返回的映射保留了從原始數(shù)組產(chǎn)生的鍵的條目迭代順序芽偏。
println("groupBy 按年齡分組雷逆,并修改年齡分組中的實(shí)體類 == ${persons.groupBy({it.age}){Student(it.age,it.weight,(9..12).random(),it.name)}}")
map1: [false, true, false, true, false, true, false]
map2: [4, 5, 8, 7, 6, 9, 10]
array1 = [[1, 5, 9], [11, 40, 21], [3, 15, 10], [6, 8, 10]]
flatMap: [1, 5, 9, 3, 6, 8]
flatten: [1, 5, 9, 11, 40, 21, 3, 15, 10, 6, 8, 10]
groupBy_age: {16=[{16,45,小紅}, {16,50,小綠}], 18=[{18,45,小紫}, {18,50,小藍(lán)}]}
groupBy_weight: {45=[{16,45,小紅}, {18,45,小紫}], 50=[{16,50,小綠}, {18,50,小藍(lán)}]}
groupBy 按年齡分組,并修改年齡分組中的實(shí)體類 == {16=[{學(xué)生:小紅,年級:9,年齡:16,體重:45}, {學(xué)生:小綠,年級:9,年齡:16,體重:50}], 18=[{學(xué)生:小紫,年級:11,年齡:18,體重:45}, {學(xué)生:小藍(lán),年級:12,年齡:18,體重:50}]}
5哮针、過濾操作符
- filter,返回數(shù)組中符合給定條件的元素列表
- filterNot,過濾出所有不滿足條件的元素
- filterNotNull十厢,過濾出非NULL的元素
- take等太,返回包含前[n]個元素的列表,(入?yún)⒕褪莕值)
- drop蛮放,返回包含除前[n]個元素外的所有元素的列表
val array = arrayOf(1, 2, 5, 4, 3, 6, 7)
println("filter:${array.filter { it < 5 }}")
println("take:${array.take(4)}")
println("drop:${array.drop(4)}")
filter:[1, 2, 4, 3]
take:[1, 2, 5, 4]
drop:[3, 6, 7]
6缩抡、生成操作符
- zip,將兩個數(shù)組進(jìn)行和并包颁,返回一個Pair的list 瞻想,pair中包含有兩個數(shù)組中相同下標(biāo)的元素,返回的list的長度娩嚼,由最短的數(shù)組決定蘑险。(也可以自定義返回列表中的類型)
- partition,返回一個Pair 其中包含兩個列表岳悟,第一個列表時符合給定條件的列表佃迄,第二個列表時不合符條件的列表。(類似于filter 贵少,只是把過來后的元素組成了一個列表一起返回了)
- plus呵俏,返回一個在原數(shù)組的基礎(chǔ)上,追加了一個新元素的新數(shù)組滔灶。原數(shù)組沒有改變
data class Person(val age: Int, val name: String) {
override fun toString(): String {
return "{$age,$name}"
}
}
fun <T> Array<T>.toString1(): String {
val sb = StringBuilder("[")
for ((index, value) in this.withIndex()) {
sb.append(value)
sb.append(",")
}
sb.delete(sb.length - 1, sb.length)
sb.append("]")
return sb.toString()
}
fun main() {
val array = arrayOf(1, 2, 5, 4, 3, 6, 7)
val array1 = arrayOf("今天", "明天", "后天", "天天都愛你")
println("zip1:${array.zip(array1)}")
println("zip2:${array.zip(array1) { a, b -> Person(a,b) }}")
println("partition:${array.partition { it < 5 }}")
println("plus:${array.plus(19).toString1()}")
println("array:${array.toString1()}")
}
zip1:[(1, 今天), (2, 明天), (5, 后天), (4, 天天都愛你)]
zip2:[person={1,今天}, person={2,明天}, person={5,后天}, person={4,天天都愛你}]
partition:([1, 2, 4, 3], [5, 6, 7])
plus:[1,2,5,4,3,6,7,19]
array:[1,2,5,4,3,6,7]
參考鏈接:http://www.reibang.com/p/a2d37bda3498
https://blog.csdn.net/I_can_move_you/article/details/120380455