将任何地图投射到自定义类型

时间:2015-11-05 11:55:30

标签: groovy

我试图找到一种方法将任何 地图投射到我的班级 A 的实例,使用" as& #34; operator.in Groovy,像这样:

import java.util.concurrent.ConcurrentHashMap;
class A { 
    def list = new ArrayList();
    A( Map map ) {
        for( e in map.entrySet() ) {
            list.add( e.getKey );
            list.add( e.getValue() );
        }
    }
};
def map = [ key1 : 'value1', key2 : 'value2' ] as ConcurrentHashMap;
def instA = map as A;
assert instA.list.containsAll( [ 'key1', 'value1', 'key2', 'value2' ] );

这是一个假设的例子,但它显示了问题的本质。

1 个答案:

答案 0 :(得分:1)

一旦我在问题中解决了拼写错误,(并用更常规的解决方案替换了for循环),这似乎有效:

import java.util.concurrent.ConcurrentHashMap;

class A { 
    def list
    A( Map map ) {
        list = map.inject([]) { l, key, value -> l << key << value }
    }
}

def map = [ key1 : 'value1', key2 : 'value2' ] as ConcurrentHashMap
def instA = map as A

assert instA.list == [ 'key1', 'value1', 'key2', 'value2' ]