最近發(fā)現(xiàn)暖庄,學(xué)習(xí)kotlin的路上雄驹,不僅kotlin的語法比Java的更加簡潔,而且,kotlin中的許多特殊語法技巧都是Java中沒有的霞怀,今天我將著重介紹Filter機制:
filter機制,正如名字一樣,他的作用一目了然滤灯,實現(xiàn)過濾功能,下面這個類是模仿filter功能進行編寫的豫尽。并且使用filter對于代碼進行優(yōu)化,其中的好處大家一目了然。
/**
* 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}
}
}
//或者是這樣的,連賦參數(shù)都是不需要的爬舰,it關(guān)鍵字對于實現(xiàn)迭代器的集合是自動迭代的
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())
}
}
}
(例子是我在網(wǎng)上之前看到的,覺得作者的思路很好,于是拿來借鑒)
通過這個例子,基本上清楚了filter的作用。