主要针对集合操作,注释上都有解释,直接贴代码。
class ListPrise {
val TAG:String ="listPrise==="
var listData = listOf<Int>(123,23,123,22,12,4,12)
/**
* ------------------------------------------------
* 下标操作类
*/
/**
* 是否包含某个元素
*/
fun containsPs(){
val contains = listData.contains(12)
Log.i(TAG,contains.toString())
}
//返回对应的元素,越界会抛IndexOutOfBoundsException
fun elementAt(){
val s = listData.elementAt(3)
Log.i(TAG,s.toString())
}
//返回符合条件的第一个元素,没有 返回null
fun firstOrNull(){
val s = listData.firstOrNull {it==23}
Log.i(TAG,s.toString())
}
//返回符合条件的最后一个元素,没有 返回null
fun lastOrNull(){
val s = listData.firstOrNull {it<23}
Log.i(TAG,s.toString())
}
//返回指定元素的下标,没有 返回-1
fun indexOf(){
val s = listData.indexOf(23)
Log.i(TAG,s.toString())
}
//返回符合条件的单个元素,如有没有符合或超过一个,返回null
fun singleOrNull(){
val s = listData.singleOrNull { it<5 }
Log.i(TAG,s.toString())
}
/**
* ------------------------------------------------
* 判断类
*/
//判断集合中 是否有满足条件 的元素
fun any(){
val s = listData.any { it>23 }
Log.i(TAG,s.toString())
}
//判断集合中的元素 是否都满足条件
fun all(){
val s = listData.all { it<100 }
Log.i(TAG,s.toString())
}
//判断集合中是否 都不满足条件,是则返回true
fun none(){
val s = listData.none { it>0 }
Log.i(TAG,s.toString())
}
//查询集合中 满足条件 的 元素个数
fun count(){
val s = listData.count(){
it <5
}
Log.i(TAG,s.toString())
}
//从 第一项到最后一项进行累计
fun reduce(){
val s = listData.reduce { acc, i -> acc}
Log.i(TAG,s.toString())
}
/**
* ------------------------------------------------
* 过滤类
*/
//过滤 掉所有 不满足条件 的元素
fun filter(){
val s = listData.filter { it>100 }
Log.i(TAG,s.toString())
}
// 过滤所有 满足条件的元素
fun filterNot(){
val s = listData.filterNot { it<5 }
Log.i(TAG,s.toString())
}
//过滤NULL
fun filterNotNull(){
val s = listData.filterNotNull()
Log.i(TAG,s.toString())
}
//返回前 n 个元素
fun take(){
val s = listData.take(3)
Log.i(TAG,s.toString())
}
/**
* ------------------------------------------------
* 转换类
*/
//转换成另一个集合(与上面我们实现的 convert 方法作用一样)
fun map(){
val s = listData.map {it+20>100}
Log.i(TAG,s.toString())//结果:[true, false, true, false, false, false, false]
}
//除了转换成另一个集合,还可以拿到Index(下标);
fun mapIndexed(){
val s = listData.mapIndexed { index, i -> i }
Log.i(TAG,s.toString())
}
//执行转换前过滤掉 为 NULL 的元素
fun mapNotNull(){
val s = listData.mapNotNull { it >222 }
Log.i(TAG,s.toString())
}
//自定义逻辑合并两个集合;
fun flatMap(){
var lis2 = listOf<String?>("sdds","b")
val s = listData.flatMap { lis2}
Log.i(TAG,s.toString()) //结果[sdds, b, sdds, b, sdds, b, sdds, b, sdds, b, sdds, b, sdds, b]
}
//按照某个条件分组,返回Map;
fun groupBy(){
var s = listData.groupBy { it>100 }
Log.i(TAG,s.toString())//结果 {true=[123, 123], false=[23, 22, 12, 4, 12]}
}
//反序
fun reversed(){
var s = listData.reversed()
Log.i(TAG,s.toString())//[12, 4, 12, 22, 123, 23, 123]
}
// 升序
fun sorted(){
var s = listData.sorted()
Log.i(TAG,s.toString())// [4, 12, 12, 22, 23, 123, 123]
}
//降序
fun sortedDescending(){
var s= listData.sortedDescending()
Log.i(TAG,s.toString())//[123, 123, 23, 22, 12, 12, 4]
}
//自定义排序
fun sortedBy(){
var listP = ArrayList<Pepole>()
for (i in 1..10){
listP.add(Pepole(Random().nextInt(50),Random().nextInt(20)))
}
var s = listP.sortedBy { it.age }
Log.i(TAG,s.toString())//[Pepole(age=3, year=13), Pepole(age=3, year=13), Pepole(age=14, year=19), Pepole(age=26, year=4), Pepole(age=35, year=5), Pepole(age=35, year=10), Pepole(age=36, year=14), Pepole(age=42, year=17), Pepole(age=45, year=10), Pepole(age=47, year=7)]
}
class Pepole(var age:Int,var year:Int){
override fun toString(): String {
return "Pepole(age=$age, year=$year)"
}
}
}