Kotlin 中的特殊之处---filter的使用

最近发现,学习kotlin的路上,不仅kotlin的语法比Java的更加简洁,而且,kotlin中的许多特殊语法技巧都是Java中没有的,今天我将着重介绍Filter机制:

filter机制,正如名字一样,他的作用一目了然,实现过滤功能,下面这个类是模仿filter功能进行编写的。并且使用filter对于代码进行优化,其中的好处大家一目了然。

/**

* Created by Administrator on 2017/8/17 0017.

* 这是一个Kotlin的filter的测试类,希望通过这个类来充分理解filter(过滤器)机制

*/

//这是士兵的超类

abstract open class  Soldier{

abstract fun test()

}

//类型为T的士兵类

classT :Soldier(){

override funtest() {

Shopper().createShopping(this)

}

}

//CT类士兵

class CT:Soldier(){

override funtest() {

Shopper().createShopping(this)

}

}

//武器拥有枚举类,不同的士兵武器是不同的

enum classArmsPermissions{

Both,OnlyT,OnlyCT

}

//

abstract classWeapon{

abstract valpermission:ArmsPermissions

}

classWeaponFactory{

funcreateAllWeapons():List{

valallWeapons =mutableListOf()

returnallWeapons

}

}

//过滤器我的抽象

interfacePermissionFilter{

funfilter(allWeapons:List):List

}

//CT的过滤器,,原始的方法

//class CTPermissionFilter:PermissionFilter{

//    override fun filter(allWeapons: List): List {

//        var weaponList:MutableList = mutableListOf()

//        for (weapon in allWeapons){

//            if (weapon.permission!=ArmsPermissions.OnlyT){

//                weaponList.add(weapon)

//            }

//        }

//        return weaponList

//    }

//}

//CT的过滤器,使用filter之后的方法,这里的weapon是从集合中的对象

classCTPermissionFilter:PermissionFilter{

override funfilter(allWeapons: List): List {

returnallWeapons.filter{weapon->weapon.permission!=ArmsPermissions.OnlyT}

}

}

//或者是这样的,连赋参数都是不需要的,it关键字对于实现迭代器的集合是自动迭代的

classCTPermissionFilter1:PermissionFilter{

override funfilter(allWeapons: List): List {

returnallWeapons.filter{ it.permission!=ArmsPermissions.OnlyT}

}

}

//T的过滤器

classTPermissionFilter:PermissionFilter{

override funfilter(allWeapons: List): List {

varweaponList =mutableListOf()

for(weaponinallWeapons){

if(weapon.permission!=ArmsPermissions.OnlyCT){

weaponList.add(weapon)

}

}

returnweaponList

}

}

//商店开始购买

classShopper{

funcreateShopping(consumer:Soldier):List{

if(consumerisT){

returnTPermissionFilter().filter(WeaponFactory().createAllWeapons())

}else{

returnCTPermissionFilter().filter(WeaponFactory().createAllWeapons())

}

}

}

(例子是我在网上之前看到的,觉得作者的思路很好,于是拿来借鉴)

通过这个例子,基本上清楚了filter的作用。

你可能感兴趣的:(Kotlin 中的特殊之处---filter的使用)