可排序的类似Java的类

时间:2009-02-19 11:07:14

标签: java sorting

有没有人知道Java中有一个元素列表的类,以便元素可以被任何元素成员排序? 这个想法基本上是有一些类似数据库表的实现,你可以在其中添加要排序的字段。举例说明:

SomeTable table = new SomeTable();
table.addField("name", String);
table.addField("age", int);
table.addField("hair color", String);
table.add(new Object[]{"Thomas", 32, "brown"});
table.add(new Object[]{"Jack", 34, "black"});

table.sort("age")会对表格进行排序,以便托马斯是第一个元素,而table.sort("name")会对表格进行排序,以便杰克成为第一个元素。

我可以自己编写类似的东西(实际上我曾经做过一次),但我很想知道是否有一个现成的库来做这些事情(没有数据库)。

PS:我知道int不是一个类,但这不是重点。此示例代码仅用于显示我期望的功能类型。


7 个答案:

答案 0 :(得分:4)

您必须使用Collection.sort()界面考虑Comparator功能。有一个很好的例子here

答案 1 :(得分:3)

我能想到的最接近的事情是Apache Commons BeanUtils API。例如,对于“学生”表。

  DynaProperty[] props = new DynaProperty[]{
        new DynaProperty("firstName", String.class),
        new DynaProperty("lastName",  String.class),
        new DynaProperty("address", java.util.Map.class)

      };
    BasicDynaClass dynaClass = new BasicDynaClass("student", null, props);

给出这些学生对象的集合。我们定义了一个BeanComparator

 BeanComparator surnameComparator
        = new BeanComparator("lastname");
Collections.sort(table, surnameComparator);

不确定这是否是您正在寻找的,但似乎非常接近。

答案 2 :(得分:3)

Publicobject的glazedlists几乎完全符合您的要求。我已将其用于simillar报告生成要求。它本质上是一种为内存列表提供视图的机制。您的视图可以进行排序,过滤,并通常以各种方式进行转换。它还有一个简单的更新机制,因此您可以在主列表中插入新项目,所有筛选/排序的视图都将看到更新事件。

传统上它作为Swing网格/ JTable的支持模型非常受欢迎,但它与Swing API无关,可以在任何缓存列表的地方使用。

当我使用它时,我们在内存中只有几千个对象,性能非常好。不知道它如何扩展到巨大的数字。

答案 3 :(得分:1)

答案 4 :(得分:1)

Google Collections Library有一种类似于Multimap的东西。根据API文档:

“类似于Map的集合,但可以将多个值与一个键相关联。如果您使用相同的键但不同的值调用put(K,V)两次,则multimap包含来自的映射。这两个价值观的关键。“

因此,您可以将名称作为键,然后拨打put("Thomas", 32);,然后拨打put("Thomas", "brown");等。

如果您使用此界面的TreeMultimap实现,则可以传入Comparator进行排序/排序。

答案 5 :(得分:1)

至少存在一个支持排序的javax.sql.rowset实现。

许多Swing TableModel扩展允许排序(我认为这是教程示例)。即使你没有做GUI的东西,也不要害怕“Swing”位。大多数Swing模型根本不涉及“真正的”Swing组件,因此可以认为是完全独立的(除了错误的命名)。

答案 6 :(得分:0)

  • 使用名为“name”,“age”,“hair color”
  • 的字段创建一个类
  • 将该类的实例放入ArrayList
  • 将Collections.sort()与比较特定字段的自定义比较器一起使用