Groovy支持Pair类型(例如来自Java或C ++的类型)吗?如果不支持,有什么好的方法可以解决这个问题?
Groovy支持使用类Tuple2
来表示一对数值。
下面是一个使用Tuple2
的小例子:
def m = [a: new Tuple2(1, 2)]
m.b = new Tuple2('1', '2')
assert m.a.first == 1
assert m.a.second == 2
assert m.b.first == '1'
assert m.b.second == '2'
你也可以使用 Map
作为值来实现大致相同的效果:
def n = [a: [first: 1, second: 2]]
n.b = [first: '1', second: '2']
assert n.a.first == 1
assert n.a.second == 2
assert n.b.first == '1'
assert n.b.second == '2'
groovy:000> (a, b) = [1, 2]
===> [1, 2]
groovy:000> a
===> 1
groovy:000> b
===> 2
在 Apache Commons Lang v3(gradle 坐标 'org.apache.commons:commons-lang3:+'
)中有一个广泛使用的 Pair
抽象。类签名如下:
package org.apache.commons.lang3.tuple;
public abstract class Pair<L, R> implements Map.Entry<L, R>, Comparable<Pair<L, R>>, Serializable
Pair.of(left,right)
创建实例。从Groovy的角度来看,该对象具有属性对left
和right
,或者由于该类实现了Map.Entry
,也可以选择key
和value
。def p = Pair.of("hello", "world")
assert p.left == "hello"
assert p.right == "world"
assert p.key == "hello"
assert p.value == "world"
Pair
类(在此处已验证),因此你可能看到的任何使用Pair
对象的Java代码都可能使用相同的Apache Commons依赖项。