scala 之 map 操作史上最全_scala map添加元素-程序员宅基地

技术标签: 操作  scala  map  

Map(映射)是一种可迭代的键值对(key/value)结构。
所有的值都可以通过键来获取。
Map 中的键都是唯一的。
Map 也叫哈希表(Hash tables)。
Map 有两种类型,可变与不可变,区别在于可变对象可以修改它,而不可变对象不可以。
默认情况下 Scala 使用不可变 Map。如果你需要使用可变集合,你需要显式的引入 import scala.collection.mutable.Map 类
在Scala中你可以同时使用可变与不可变 Map,不可变的直接使用 Map,可变的使用 mutable.Map.以下实例演示了不可变 Map 的应用:

关于scala中list的操作可以看这个

直接看demo,下面代码展示了几乎所有对map的操作:

package test

/**
  * map的操作;
  */
object MapDemo {
  def main(args: Array[String]): Unit = {
    var map = Map[String,String]("name" -> "jason","age" -> "500","test_100" -> "test_100","test_101" -> "test_101") //引用可变,支持读写操作;
    map += ("city" -> "北京")  //新增
    println(map)  //打印结果为:Map(city -> 北京, name -> jason, test_100 -> test_100, test_101 -> test_101, age -> 500);
    val map2 = Map[String,String]("sex" -> "男","brand" -> "apple") //引用不可变,只能第一次写入值,之后只能读取;
    //map2 += ("test" -> "报错吗")  //此时不能加,直接报错;
    val map3 = scala.collection.mutable.Map[String,String]()   //引用不可变,支持读写操作;
    map3 += ("test" -> "能添加吗")  //添加单个元素;
    map3 += ("test" -> "改变了") //更新;
    map3 += ("success" -> "添加成功了吗","anthor" -> "另外一个")  //添加多个元素;
    println(map3)  //打印结果为:Map(success -> 添加成功了吗, anthor -> 另外一个, test -> 能添加吗);
    println(map3.keys)  //返回所有的key;
    println(map3.values)//返回所有的value;
    println(map3.isEmpty) //当map为空时,返回true;
    var combine_map = map ++ map2  //合并两个map;
    println(combine_map) //打印结果为:Map(city -> 北京, name -> jason, test_100 -> test_100, test_101 -> test_101, age -> 500, brand -> apple, sex -> 男);
    combine_map -= ("city","name") //删除指定的key;
    println(combine_map)  //打印结果为:Map(test_100 -> test_100, test_101 -> test_101, age -> 500, brand -> apple, sex -> 男)
    println(combine_map.get("age").get)  //返回指定key的值;
    println(combine_map.init) //返回所有元素,除了最后一个;
    println(combine_map.last) //返回最后一个元素;
    println(combine_map.max)  //查找最大元素;
    println(combine_map.min)  //查找最小元素;
    println(combine_map.mkString("")) //集合所有元素作为字符串显示;
    //println(combine_map.product) //返回集合中数字元素的积;注意得是num型;
    println(combine_map.size)  //返回map的大小;
    println(combine_map.toArray) //集合转数组;
    println(combine_map.toBuffer) //返回缓冲区,包含了Map的所有元素;
    println(combine_map.toList) //返回List,包含了Map的所有元素;
    combine_map.get("test_101").getOrElse("不存在") //根据key取value值,如果不存在返回后面的值;
    val keySet = combine_map.keys
    val key_iter = keySet.iterator  //遍历,迭代map;
    while (key_iter.hasNext){
      val key = key_iter.next
      println(key + ":" + combine_map.get(key).get)
    }
    println(combine_map.apply("brand")) //返回指定键的值,如果不存在返回 Map 的默认方法;
    println(combine_map.contains("test_key")) //如果map中存在指定 key,返回 true,否则返回 false;
    val age_count = combine_map.count(x=>{  //计算满足指定条件的集合元素数量;
      x._1.equals("age")
    })
    println(age_count) //打印结果为1;
    val drop_map = combine_map.drop(1) //返回丢弃最后n个元素新集合;
    println(drop_map) //打印结果为:Map(brand -> apple, sex -> 男);
    println(combine_map.empty) //返回相同类型的空map;
    println(map.equals(map2)) //如果两个 Map 相等(key/value 均相等),返回true,否则返回false;
    println(combine_map.exists(x => { //判断集合中指定条件的元素是否存在;
      x._2.equals("男")
    }))
    println(combine_map.filter(x=>{  //返回满足指定条件的所有集合; 结果为:Map(brand -> apple);
      x._1.length > 4
    }))
    println(combine_map.filterKeys(x=>{ //返回符合指定条件的不可变 Map;
      x.equals("test_100")
    }))
    println(combine_map.find(x=>{  //查找集合中满足指定条件的第一个元素;
      x._1.equals(x._2)
    }))
    combine_map.foreach(x=>{   //循环map里的所有元素;
      println(x +"------------")
    })

  }
}

如果有写的不对的地方 欢迎大家指正 如果有什么疑问 可以加下面的技术交流群

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xianpanjia4616/article/details/80947616

智能推荐

命令注入绕过小结_php 命令 注入 绕过-程序员宅基地

文章浏览阅读944次。学到的东西,拎出来,总结总结,分享出来,才是完整的学习过程我觉得。一、命令注入官方的解释:即 Command Injection。是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。记得师傅用一句话概括注入的本质:就是把非法的输入当做代码来执行了。二、绕过.号被过滤,无法执行反弹目标机器的IP(例:192.168.1.1)时,将IP转成十进制进行绕过。(172...._php 命令 注入 绕过

job源码分析_new jobconf-程序员宅基地

文章浏览阅读1.4k次。/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * ..._new jobconf

PVE FRP MySQL 端口映射_frp pve-程序员宅基地

文章浏览阅读1.3k次。PVE FRP MySQL 端口映射前言虚拟软件(PVE,VMWare,Docker,VirtualBox)如果用有线连接除宿主机之外的主机均有可能连不上虚拟机里的MySQL,使用Wifi 就100% 能连上目前已知的解决办法是用frp 做虚拟机和宿主机的端口映射,然后其他机器访问宿主机服务端# 创建安装目录mkdir -p /opt/modules# 下载frpcd && wget https://github.com/fatedier/frp/releases/dow_frp pve

联合概率数据互联(JPDA) ----多假设跟踪(MHT)-程序员宅基地

文章浏览阅读3.8w次,点赞36次,收藏237次。联合概率数据关联(Joint Probabilistic Data Association,JPDA) 联合概率数据互联JPDA是数据关联算法之一,它的基本思想是:对应于观测数据落入跟踪门相交区域的情况,这些观测数据可能来源于多个目标。JPDA的目的在于计算观测数据与每一个目标之间的关联概率,且认为所有的有效回波都可能源于每个特定目标,只是它们源于不同目标的概率不同。JPDA算法的..._多假设跟踪

ARKit从入门到精通(1)-ARKit初体验-程序员宅基地

文章浏览阅读10w+次,点赞59次,收藏161次。ARKit从入门到精通(1)-ARKit初体验转载请标注出处:http://blog.csdn.net/u013263917/article/details/72903174,以及版权归属黑马程序员:http://www.itheima.com1.1-AR技术简介增强现实技术(Augmented Reality,简称 AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像、视频、3D模型的技_arkit

git查看commit历史,某次commit修改内容,指定文件修改历史_如何查看历史commi的修改信息-程序员宅基地

文章浏览阅读7.2k次。git log 查看commit的历史 git show 查看某次commit的修改内容 git log -p 查看某个文件的修改历史 git log -p -2查看最近2次的更新内容_如何查看历史commi的修改信息

随便推点

APP兼容性测试_为什么app要测兼容性-程序员宅基地

文章浏览阅读1.1k次。主要测试内部和外部兼容性1)与本地及主流App是否兼容2)与各种设备是否兼容,若有跨系统支持则需要检验是否在个系统下,各种行为是否一致。不同手机屏幕分标率的兼容性不同手机品牌的兼容性..._为什么app要测兼容性

关于串行通信、通信接口、接口连接器、通信协议的理解_通讯器,连接器,串口器的区别-程序员宅基地

文章浏览阅读3.8k次,点赞2次,收藏4次。串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间交换信息,特别使用于计算机与计算机、计算机与外设之间的远距离通信。通信接口是指中央处理器和标准通信子系统之间的接口。(是否可以理解为对电气特性的定义?)串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流_通讯器,连接器,串口器的区别

Android面试题精选——再聊Android-Handler机制-2(1),一次关于JVM的面试经历-程序员宅基地

文章浏览阅读583次,点赞29次,收藏25次。写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于Flutter的学习思路及方向,从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的。

设计模式中工厂方法与抽象工厂之间的区别联系-程序员宅基地

文章浏览阅读379次,点赞5次,收藏5次。无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》

自己写一个Map (实现Map接口并利用散列原理)-程序员宅基地

文章浏览阅读1.8k次。1.EntryMap是java中的接口,Map.Entry是Map的一个内部接口。Map提供了一些常用方法,如keySet()、entrySet()等方法,keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V&g..._自己写一个map

没问题的项目突然报java.net.BindException: Address already in use: bind_websocket address in use-程序员宅基地

文章浏览阅读7.6k次。项目里面用到了websocket,确定端口号没有其他服务在使用,一直都跑的好好的,突然抽风报java.net.BindException: Address already in use: bind,说是端口被占用,打断点看到初始化websocket的时候抛出异常,端口被占用。疯狂clean object,重开eclipse,外加百度,都没有用。最后问了同事,让我看看是不是后台进程没有杀掉,一看..._websocket address in use

推荐文章

热门文章

相关标签