在单个数据结构中维护两种不同类型的值的Java映射

时间:2019-01-25 21:52:00

标签: java

我有一些看起来像这样的对象

var apptDetails

有时我想按名称查找项目,有时我想按ID查找项目。我显然可以通过

 IEnumerable<DataRow> apptDetails
 IEnumerable<EnumerableRowCollection> apptDetails
 as well as:
 DataTable dt = apptDetails.CopyToDataTable<DataRow>();
 DataTable dt = apptDetails.CopyToDataTable<EnumerableRowCollection>();

但是,这需要维护两个地图,并且在某个时候,我(或另一个不熟悉双重地图的用户)将对代码进行更改,并且仅更新其中一个地图。

显而易见的解决方案是创建一个类来管理两个地图。这样的类是否已经存在(可能在第三方软件包中)?

我正在寻找可以让我做点事情的事情

class Widget {
  String name;
  int id;
  // Intuitive constructor omitted
}

1 个答案:

答案 0 :(得分:1)

一种简单的解决方案是,编写包含两个密钥的自己的密钥类。

class WidgetKey {
  String id;
  String name;
  boolean equals() {...}
  boolean hashCode() {...}
}

Map<WidgetKey, Widget> yourMap;

请注意,必须在WidgetKey类中实现equals和hashCode。否则put / get和其他地图方法将无法正常工作。