【发布时间】:2011-07-09 10:50:11
【问题描述】:
我有以下数组:
private static Optreden[] optredens = {
new Optreden("Editors", "Main Stage", 16, 0, 4),
new Optreden("Empire of the Sun", "Pyramid Marquee", 23, 45, 5),
new Optreden("Florence and the Machine", "Marquee", 18, 45, 3),
new Optreden("The Specials", "Marquee", 13, 10, 5),
new Optreden("Muse", "Main Stage", 19, 0, 5),
new Optreden("Faithless", "Main Stage", 14, 30, 5),
new Optreden("Absynthe Minded", "Pyramid Marquee", 21, 45, 5),
new Optreden("Pink", "Main Stage", 20, 30, 2),
new Optreden("Editors", "Marquee", 21, 20, 4),
new Optreden("Faithless", "Pyramid Marquee", 19, 0, 5)
};
Optreden 对象构造函数如下所示:
Optreden(name, stage, hour, minutes, rating);
现在,我必须创建一个 Optreden 对象的 HashSet,但它可能不包含重复的名称,所以当我打印 HashSet 时,它必须如下所示:
The Specials (Marquee, 13u10)--> *****
Empire of the Sun (Pyramid Marquee, 23u45)--> *****
Florence and the Machine (Marquee, 18u45)--> ***
Pink (Main Stage, 20u30)--> **
Muse (Main Stage, 19u)--> *****
Absynthe Minded (Pyramid Marquee, 21u45)--> *****
Editors (Main Stage, 16u)--> ****
Faithless (Main Stage, 14u30)--> *****
问题是,我无法编辑 Optreden 类,它只有一个构造函数和一个 toString 方法,没有 getName() getter。
我怎样才能做到这一点?谢谢。
【问题讨论】:
-
用name作为key的Map怎么样?... 归根结底,HashSet就是一个HashMap,其key和value是同一个对象。
-
这看起来更像是一个组织问题而不是技术问题,我们只能帮助您解决技术问题...例如,您可以继承 Optreden 吗?或者,如果所有其他方法都失败了,反射会忽略可见性,但会牺牲代码可读性、类型安全性和运行时性能。
-
在我看来,你的 Optreden 类的设计(性能 - 如音乐 - 英语)是问题的来源。具有 getter、setter、equals() 和 hashcode 的兼容 javabean 设计将使您走得更远。例如鉴于您的要求是一个集合,您可以使用带有自定义比较器的 TreeSet 来实现您的目标。如果您所拥有的只是一个 toString() 方法,我会使用 String 构造函数为 Optreden 创建一个适当的 JavaBean。使用它来解析设计不良的原始类的 toString() 输出,并为 equals() 和 hashcode() 方法提供正确的实现。
-
嗯,Rock Werchter 的组织者:D