我有一些代码,我从JMS主题读取一个对象(遗憾的是我不能共享实际的代码,所以我将使用一个假设的例子) - 让我们假设对象是Employee(firstName,lastName,postCode) ,电子邮件等),我将员工对象插入到Map中,其中键是用于快速检索的电子邮件地址。但是,我的要求可能会改变,我可能还需要通过firstName查找。所以现在我必须维护两个地图,一个是通过电子邮件键入的,另一个是通过firstName键入的。然后,如果我得到一个新的要求,我必须维护一个额外的地图,依此类推 - 噩梦代码随之而来。
我看了一下Guava BiMap,如果你只有2个字段并且它们都是唯一的,这很棒,但我想知道那里是否有一个Util(Apache Commons Collections,Guava Collections,还有其他)这将开箱即用 - 基本上,我想要一个类似List的东西,我可以非常简单地插入和删除它,它将为我处理几个支持映射,以便通过给定字段查找元素大致为O( 1)。我目前的实现是使用Java 8 parallelStream和filter,但是一旦我的列表增长(这可能达到几百万条目),这不会扩展。
到目前为止,我唯一提出的另一个选择是使用内存数据库,如HSQLDB,索引每一列,并使用一些简单的SQL来检索我的值。我相信这会起作用,但是在维护模式,编写查询等方面有相当大的开销。
TL; DR :lilbrary中是否有一个看起来像List的集合类型,但它可以根据对象中的任何字段进行O(1)检索?