map与list
package tcode.chapter05.practise
import java.util
object $11_GroupBy {
/**
* 4、根据指定规则对集合中的元素进行分组
* 数据: Array("zhangsan 男 shenzhen","lisi 女 beijing","zhaoliu 男 beijing")
* 规则: 根据地址分组 [可变]
* 结果: Map(shenzhen->List( "zhangsan 男 shenzhen" ), biejing->List( "lisi 女 beijing","zhaoliu 男 beijing") )
*
*/
def main(args: Array[String]): Unit = {
val datas = Array("zhangsan 男 shenzhen","lisi 女 beijing","zhaoliu 男 beijing")
val func = (x:String) => x.split(" ")(2)
val func2 = (x:String) => x.split(" ")(1)
println(groupBy(datas, func))
println(groupBy(datas, (x:String) => x.split(" ")(1)))
println(groupBy(datas, x => x.split(" ")(1)))
println(groupBy(datas, _.split(" ")(1)))
}
def groupBy(datas:Array[String],func: String => String) = {
val map = new util.HashMap[String,util.List[String]]()
//Map("shenzhen"->List( .. ))
for(element<- datas){
val key = func(element)
//判断key在map中是否存在,如果存在,直接将元素添加到list中
if(map.containsKey(key)){
map.get(key).add(element)
}
//如果不存在,创建LiSt,将元素添加进去
else{
val list = new util.ArrayList[String] ()
list.add(element)
map.put(key,list)
}
}
map
}
}
守护和普通if语句的一点区别:
守护:只有满足守护条件才进入方法体
if:无操作时,返回空值:()
package tcode.chapter05.practise
object $09_Filter {
/**
* 2、根据指定规则对数据进行过滤
* 数据: Array(10,2,4,5,7,9,20)
* 规则: 过滤掉奇数数据 [可变]
* 结果: Array(10,2,4,20)
*/
def main(args: Array[String]): Unit = {
val datas = Array(10,2,4,5,7,9,20)
val func = (x:Int) => x%2!=0
println(filter(datas, func).toList)
//可以用_简化
println(filter(datas, _%2==0).toList)
}
def filter(datas:Array[Int],func: Int => Boolean ) ={
for( element <- datas if( func(element) ) ) yield {
element
}
// 这种情况不满足条件时会返回值类型:空值()
// for (arr<- array if ) yeild {
// if (func(arr)==0 ) {
// arr
// }
// }
}
}
守卫结果:
·
不守卫结果: