map与list

  1. package tcode.chapter05.practise
  2. import java.util
  3. object $11_GroupBy {
  4. /**
  5. * 4、根据指定规则对集合中的元素进行分组
  6. * 数据: Array("zhangsan 男 shenzhen","lisi 女 beijing","zhaoliu 男 beijing")
  7. * 规则: 根据地址分组 [可变]
  8. * 结果: Map(shenzhen->List( "zhangsan 男 shenzhen" ), biejing->List( "lisi 女 beijing","zhaoliu 男 beijing") )
  9. *
  10. */
  11. def main(args: Array[String]): Unit = {
  12. val datas = Array("zhangsan 男 shenzhen","lisi 女 beijing","zhaoliu 男 beijing")
  13. val func = (x:String) => x.split(" ")(2)
  14. val func2 = (x:String) => x.split(" ")(1)
  15. println(groupBy(datas, func))
  16. println(groupBy(datas, (x:String) => x.split(" ")(1)))
  17. println(groupBy(datas, x => x.split(" ")(1)))
  18. println(groupBy(datas, _.split(" ")(1)))
  19. }
  20. def groupBy(datas:Array[String],func: String => String) = {
  21. val map = new util.HashMap[String,util.List[String]]()
  22. //Map("shenzhen"->List( .. ))
  23. for(element<- datas){
  24. val key = func(element)
  25. //判断key在map中是否存在,如果存在,直接将元素添加到list中
  26. if(map.containsKey(key)){
  27. map.get(key).add(element)
  28. }
  29. //如果不存在,创建LiSt,将元素添加进去
  30. else{
  31. val list = new util.ArrayList[String] ()
  32. list.add(element)
  33. map.put(key,list)
  34. }
  35. }
  36. map
  37. }
  38. }

守护和普通if语句的一点区别:

守护:只有满足守护条件才进入方法体
if:无操作时,返回空值:()

  1. package tcode.chapter05.practise
  2. object $09_Filter {
  3. /**
  4. * 2、根据指定规则对数据进行过滤
  5. * 数据: Array(10,2,4,5,7,9,20)
  6. * 规则: 过滤掉奇数数据 [可变]
  7. * 结果: Array(10,2,4,20)
  8. */
  9. def main(args: Array[String]): Unit = {
  10. val datas = Array(10,2,4,5,7,9,20)
  11. val func = (x:Int) => x%2!=0
  12. println(filter(datas, func).toList)
  13. //可以用_简化
  14. println(filter(datas, _%2==0).toList)
  15. }
  16. def filter(datas:Array[Int],func: Int => Boolean ) ={
  17. for( element <- datas if( func(element) ) ) yield {
  18. element
  19. }
  20. // 这种情况不满足条件时会返回值类型:空值()
  21. // for (arr<- array if ) yeild {
  22. // if (func(arr)==0 ) {
  23. // arr
  24. // }
  25. // }
  26. }
  27. }

守卫结果:
image.png·
不守卫结果:
image.png