我有个问题。首先,让我向您展示我想比较的bean的结构:

ItemDTO包含:


名称
itemID
类型
亚型
身体的一部分
价钱


ItemOnCharacterDTO包含:


所有者ID
itemID
计数
位置


从XML文件中静态读取ItemDTO。它们成千上万,它们没有改变(至少我现在不在乎它们是否在改变)。
ItemOnCharacterDTO是通过查询数据库创建的。 ownerID,itemID,计数和位置因字符而异,因此被保存在数据库中。这里的itemID对应于有效的ItemDTO。

我有一个ItemOnCharacterDTO对象的数组(或ArrayList),我想按多个条件进行排序,例如通过“ itemOnCharacterDTO.ownerID”,“ itemDTO.name”,“ itemDTO.type”。

如果我将ItemDTO和ItemOnCharacterDTO组合到一个类(例如ItemAllDTO),则可以轻松使用apache BeanComparator。但是:我不是。
原因是:用户可以在不同字符上具有多个项目。基本项目数据(ItemDTO-data)相同,而用户特定数据(ItemOnCharacterDTO-data)更改。因此,我只加载前者一次,而每次遇到不同的ItemOnCharacterDTO时加载用户特定的数据。

因为我都是用GWT编写的,所以我决定在服务器上进行排序,因为这是所有信息所在的位置(与前端相反,在前端中,与项目相关的信息将通过分页加载)。我在服务器端使用Java。我编写了一个映射器,以从与项目相关的XML文件中正确检索静态XML数据。但是基于字符的项目相关信息存储在mysql数据库中。

我希望能够按ItemOnCharacterDTO-或ItemDTO对象中存在的属性对ItemOnCharacterDTO的数组或ArrayList进行排序(我有一种方法可以区分给定属性属于哪个DTO-含义:我知道用户是否按“计数”进行排序”,那么我将必须检查ItemOnCharacterDTO对象是否具有此属性,而不是ItemDTO对象)。

每个用户可能有数千个对象。每个ItemOnCharacterDTO具有大约5个属性,但是每个ItemDTO具有大约25个左右。因此,将它们组合到一个对象中(即使只是出于比较的目的)并不是一个真正的选择,因为它将非常缓慢且占用大量内存。

有人有更好的方法吗?我很高兴为您提供任何帮助-即使您只是提出了一个想法。我会解决的。

提前非常感谢您!非常感谢您的帮助!

伊戈尔

附注:如果您还有其他疑问,请随时提出-我会尽快答复!
P.s.2:Java是否有类似“ LINQ”的东西?也许可以帮助我解决我的问题?

最佳答案

创建两个哈希图,并使两个键保持相同,而对象将来自不同的列表。这意味着您可以轻松访问它们并轻松进行匹配。

您也可以在两个对象中覆盖equals和hashcode方法。

然后,您还可以将它们都包装在一个对象中,然后使用该对象进行排序。

关于java - 比较具有多个属性的bean,具体取决于每个bean,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8462995/

10-12 04:07