最近发现,学习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的作用。