2014-11-23 48 views
0

我正在运行聚类双打的集合的集合的聚类算法。但是,一旦聚类完成,我想弄清楚每个Double属于哪个父类。添加物业Double类

class PatientMRNA { 
    Patient patient 
    MRNA mrna 
    Double value 
} 

我询问与HQL数据库,并把选择的值从PatientMRNA表到一个集合,像这样:

[[x11,x12...x1m],[x21,x22...x2m]...[xn1, xn2, xnm]] 

这个系列得到由这里找到一个非常好的算法集群:https://coviello.wordpress.com/2013/03/30/learning-functional-programming-a-k-means-implementation-in-groovy/

一旦集群完成后,我们的结论如下:

[[centroid]: [[x?1, x?2...x?m],[x?1,x?2...x?m]...[x?1,x?2...x?m]] [centroid2]: [[],[]...[]] 

,其中每个x阵列(属于患者)的值根据随机它被分配给该群集上。

我的问题是:有没有办法在常规扩展双类,以便它也有一个PatientId财产?或者我真的应该以其他方式来看待这个问题吗?

回答

5

kocko是错误的,只要所有的代码是在Groovy,您可以使用实例的metaClass如下所示:

// a list of patients 
def patients = [ 'a', 'b', 'c', 'd', 'e' ] 

// A list of doubles 
def doubles = [ 5.0, 6.0, 2.0, 1.0, 9.0 ] 

// for each double, set it's patient property to the parent at the same index 
def decorated = [doubles, patients].transpose().collect { dbl, patient -> 
    dbl.metaClass.patient = patient 
    dbl 
} 

// sort it for fun, to prove it works 
def sortedDecorated = decorated.sort(false) 

// and print each out 
sortedDecorated.each { 
    println "$it ${it.patient}" 
} 

,打印:

1.0 d 
2.0 c 
5.0 a 
6.0 b 
9.0 e 

当然,如果你通过双打的名单掉一些Java代码,然后kocko是没错的Java没有元类的知识,所以将只返回您简单的无修饰双打

+0

赦免名单,如果这违反堆栈溢出规则,但我想我爱你。非常感谢! – janDro 2014-11-23 22:57:32

+0

哈哈!很高兴帮助,玩得开心! X ;-) – 2014-11-23 23:03:45