Groovy的一些Map
发布时间:2020-12-14 16:59:16 所属栏目:大数据 来源:网络整理
导读:???????????????????????????????????? Groovy Tip 18?Groovy的一些Map ? 在Groovy语言中,Map是一个大的家族,除了我们常用的HashMap以外,还有很多其他的形形色色的Map。当然,这些Map的存在是因为它们有不同于HashMap的地方。现在,我们就来看看其中的两
????????????????????????????????????
Groovy Tip 18?Groovy的一些Map
?
在Groovy语言中,Map是一个大的家族,除了我们常用的HashMap以外,还有很多其他的形形色色的Map。当然,这些Map的存在是因为它们有不同于HashMap的地方。现在,我们就来看看其中的两种Map。
一.
TreeMap
TreeMap
是一种能够给
Map
对象的
key
排序的
Map
,下面举一个例子来看看就能明白。
?
??? ?
def
map = [
3
:
'c'
,
2
:
'b'
,
1
:
'a'
,
5
:
'e'
,
4
:
'd'
]
??? ?
??? ?
def
tm =
new
TreeMap(map)
??? ?
??? ?
println
tm
???
?
运行的结果为:
?
[1:"a",2:"b",3:"c",4:"d",5:"e"]
?
可以看到,我们随便初始化的一个
Map
对象,经过
TreeMap
以后,它的
key
有有序起来。
通过运行结果,我们还可以看到,在默认的情况下,
TreeMap
对象里面的
key
是按顺序排序。
当然,既然是默认的情况,我们就可以改变这种默认的情况。我们可以给
TreeMap
设定一个自己的比较器,使得
TreeMap
对象的
key
按自己的要求排序。
??? ?
???
def
map = [
3
:
'c'
,
4
:
'd'
]
??? ?
???
def
com = [compare:
?????? {
?????????? a,b ->
????????????? a>b?-
1
:
1
?????? }]
as
Comparator
??????
??????
def
tm =
new
TreeMap(com)
??????
?????? tm.putAll(map)
??????
???
println
tm
?
首先,我们定义了一个比较器compare,然后通过初始化把它传递给TreeMap对象。上面的代码的运行结果为:
?
[5:"e",1:"a"]
?
可以看到,我们定义的比较器是倒序的,所以我们得到的结果也是倒序的。
?
二.
ObservableMap
ObservableMap是一个更有趣的Map类,它可以监视客户端对Map对象的操作,我们先来看看下面的代码:
??? ?
??? ?
def
om = [:]
as
ObservableMap
??? ?
??? ?om.addPropertyChangeListener({
?????? ?evt ->
?????? ??
println
"add value: ${evt.newValue}"
??? ?}
as
PropertyChangeListener)
??? ?
??? ?om.
"test"
=
'eee'
???
?
可以看到,我们给
Map
对象添加了一个监听器,这使得我们可以监听器客户端对
om
对象的操作,如上面代码的运行结果为:
?
add value: eee
?
这有点类似我们的
JavaBean
。当我们在某种特殊情况下,需要把我们的
Map
对象里面的值自动由小写转化为大写的时候,这个方法就有可能用得上。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |