将属性添加到双类

jan*_*Dro 0 groovy

我正在运行一个聚类算法,它聚集了双打集合的集合.但是一旦完成聚类,我想知道每个Double属于哪个父类.

class PatientMRNA {
     Patient patient
     MRNA mrna
     Double value
}
Run Code Online (Sandbox Code Playgroud)

我使用hql查询数据库,并将PatientMRNA表中的选定值放入Collection中,如下所示:

[[x11,x12...x1m],[x21,x22...x2m]...[xn1, xn2, xnm]]
Run Code Online (Sandbox Code Playgroud)

这个集合通过一个非常好的算法聚集在这里:https://coviello.wordpress.com/2013/03/30/learning-functional-programming-ak-means-implementation-in-groovy/

完成聚类后,我们的结果如下:

[[centroid]: [[x?1, x?2...x?m],[x?1,x?2...x?m]...[x?1,x?2...x?m]] [centroid2]: [[],[]...[]] 
Run Code Online (Sandbox Code Playgroud)

其中每个x阵列(属于患者)值是随机分配的,具体取决于它所分配的簇.

我的问题是:有没有办法在Groovy中扩展Double类,以便它还具有PatientId属性?或者我应该以其他方式看待这个问题吗?

tim*_*tes 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}"
}
Run Code Online (Sandbox Code Playgroud)

打印:

1.0 d
2.0 c
5.0 a
6.0 b
9.0 e
Run Code Online (Sandbox Code Playgroud)

当然,如果你将双打列表传递给某些Java代码,那么kocko是正确的,因为Java不知道metaClass,所以只返回一个简单的未修饰双打列表