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)
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的一个方法,根据设备编号查找并返回,求大佬帮忙写方法代码的主要内容,如果未能解决你的问题,请参考以下文章