Scala Map的一个方法,根据设备编号查找并返回,求大佬帮忙写方法代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala Map的一个方法,根据设备编号查找并返回,求大佬帮忙写方法代码相关的知识,希望对你有一定的参考价值。

(3) 获得指定编号的设备对象

-(Device*)findDevice:(int)deviceId;
以下是HashMap的定义
@BeansProperty Var devMap:HashMap[Device,Int]=new Map()
def addDevice(device:Device)=
var id:Int=device.deviceId
devMap+=(device->id)

参考技术A Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操作对象的接口组成。不同接口描述一组不同数据类型。

Java 2集合框架图

集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。

抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。

实现类:8个实现类(实线表示),对接口的具体实现。

在很大程度上,一旦您理解了接口,您就理解了框架。虽然您总要创建接口特定的实现,但访问实际集合的方法应该限制在接口方法的使用上;因此,允许您更改基本的数据结构而不必改变其它代码。

· Collection 接口是一组允许重复的对象。

· Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制。

· List 接口继承 Collection,允许重复,以元素安插的次序来放置元素,不会重新排列。

· Map接口是一组成对的键-值对象,即所持有的是key-value pairs。Map中不能有重复的key。拥有自己的内部排列机制。

· 容器中的元素类型都为Object。从容器取得元素时,必须把它转换成原来的类型。

Java 2简化集合框架图

集合接口

1.Collection 接口

用于表示任何对象或元素组。想要尽可能以常规方式处理一组元素时,就使用这一接口。

(1) 单元素添加、删除操作:

boolean add(Object o):将对象添加给集合

boolean remove(Object o): 如果集合中有与o相匹配的对象,则删除对象o

(2) 查询操作:

int size() :返回当前集合中元素的数量

boolean isEmpty() :判断集合中是否有任何元素

boolean contains(Object o) :查找集合中是否含有对象o

Iterator iterator() :返回一个迭代器,用来访问集合中的各个元素

(3) 组操作 :作用于元素组或整个集合

boolean containsAll(Collection c): 查找集合中是否含有集合c 中所有元素

boolean addAll(Collection c) : 将集合c 中所有元素添加给该集合

void clear(): 删除集合中所有元素

void removeAll(Collection c) : 从集合中删除集合c 中的所有元素

void retainAll(Collection c) : 从集合中删除集合c 中不包含的元素

(4) Collection转换为Object数组 :

Object[] toArray() :返回一个内含集合所有元素的array

Object[] toArray(Object[] a) :返回一个内含集合所有元素的array。运行期返回的array和参数a的型别相同,需要转换为正确型别。追问

兄弟,这个我已经百度到了,不需要你帮我百度,而且回答和问题牛头不对马嘴

高效的方法将键和值添加到scala中的Set Map

【中文标题】高效的方法将键和值添加到scala中的Set Map【英文标题】:efficent way Add key and value to Map of Set in scala 【发布时间】:2017-01-23 09:41:45 【问题描述】:

我有一个像这样的 scala 地图:

  val myMap: mutable.Map[String, mutable.Set[String]]= mutable.Map[String, mutable.Set[String]]()

我想以更有效的方式添加元素键:字符串和另一个值。添加将检查新的键字符串是否在 Map 中以肯定的情况,然后将新值添加到当前对应的 Set 中。如果键不存在,则添加键并使用第一个元素创建一组新的值:值。

问候 亚瑟特

【问题讨论】:

你已经尝试了什么?我绝对会推荐反对 Scala 中的可变映射。具有不可变映射的 var 允许您在开始抽象代码时正确获取标识/值。 【参考方案1】:

给定一个(key, value),如果key 存在于地图中,则value 被添加到集合中。如果key 不存在,则将key 与空集添加到map

def update(key: String, value: String, map: Map[String, Set[String]]): Unit = 
  map.get(key)
  .map(_ => map(key) += value)
  .getOrElse(map(key) = Set[String](value)) 

【讨论】:

在这个实现中,当键是新的时,您将添加一个新的集合,但我们需要将值添加到这个新集合中。 def update(key: String, value: String, map: Map[String, Set[String]]): Unit = map.get(key).map(_ => map(key) += value).getOrElse(map(key) = Set[String]().+(value)) 太好了,我无权更改您的 cmets。谢谢!!【参考方案2】:

您基本上需要的是MultiMap。

  import collection.mutable. HashMap, MultiMap, Set 
  val mm = new HashMap[Int, Set[String]] with MultiMap[Int, String]

  mm.addBinding(1, "a")
  mm.addBinding(2, "b")
  mm.addBinding(1, "c")

  println(mm) 
  //prints Map(2 -> Set(b), 1 -> Set(c, a))

Guava 带有不同的 MultiMap 的types。支持数组、基于哈希、基于链表等。而且您不必混合来创建多图。该api相当elaborate。

在 Scala Multimap 中,您有使用 Map[A,Set[B]] 的限制。你不能做new HashMap[Int, List[String]] with MultiMap[Int, String]

【讨论】:

以上是关于Scala Map的一个方法,根据设备编号查找并返回,求大佬帮忙写方法代码的主要内容,如果未能解决你的问题,请参考以下文章

使用 Scala 在以 Spark 中的列值为条件的广播 Map 上执行查找

如何根据多个因素对 Scala 中的“映射”值进行排序?

Scala:Map.flatten 的用例?

高效的方法将键和值添加到scala中的Set Map

scala的多种集合的使用之映射Map的操作方法

使用 spark 和 scala 根据总时间查找每个 ID 的前 N ​​个游戏