【发布时间】:2012-01-17 18:41:22
【问题描述】:
我有问题。首先让我向您展示我希望能够比较的 bean 的结构:
ItemDTO 包含:
- 姓名
- 项目ID
- 类型
- 亚型
- 身体部位
- 价格
ItemOnCharacterDTO 包含:
- 所有者ID
- 项目ID
- 计数
- 位置
ItemDTO 是从 XML 文件中静态读取的。有成千上万的人并且他们没有改变(至少我不在乎他们现在是否这样做)。 ItemOnCharacterDTO 是通过查询数据库创建的。 ownerID、itemID、count 和 location 因字符而异,因此保存在数据库中。这里的 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-object 中存在的属性对 ItemOnCharacterDTO 的数组或 ArrayList 进行排序(我有办法区分给定属性属于哪个 DTO - 意思:我知道用户是否按“计数”排序,我将不得不检查 ItemOnCharacterDTO-object 的这个属性,而不是 ItemDTO-object)。
每个用户可能有几千个对象。每个 ItemOnCharacterDTO 大约有 5 个属性,但每个 ItemDTO 大约有 25 个左右。因此,将它们组合到一个对象中(即使只是为了比较)也不是一个真正的选择,因为它会非常缓慢且消耗内存。
有人有更好的方法吗?我很高兴得到任何帮助——即使你只是给出一个原始的想法。我会解决的。
提前非常感谢您!非常感谢您的帮助!
伊戈尔。
P.s.:如果您还有任何问题,请随时提问 - 我会尽快回复! P.s.2:Java 是否有类似“LINQ”的东西?也许它会帮助我解决我的问题?
【问题讨论】:
-
我刚刚看到有一个JXPath,它可以查询对象。有没有办法使用它来基于两个 bean 进行比较?
标签: java mysql xml sorting comparator