Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否仍有向Java集合添加元数据的方法?_Java_Sorting_Collections_Metadata - Fatal编程技术网

是否仍有向Java集合添加元数据的方法?

是否仍有向Java集合添加元数据的方法?,java,sorting,collections,metadata,Java,Sorting,Collections,Metadata,假设我有一个对象集合,可以根据对象的不同字段,使用许多不同的比较器对其进行排序。 稍后在代码中能够知道使用哪个比较器对集合进行排序,以及它是升序还是降序,这将是很好的。还有什么方法可以优雅地完成这项工作,而不是使用一堆布尔值来跟踪事情吗?没有,没有任何实现可以做到这一点。你需要自己跟踪它。您可以对集合实现进行子类化,以添加包含此信息的字段 您还可以使用映射将实现映射到元数据,特别是您似乎希望IdentityHashMap这样做,因为您不希望将两个不同的集合作为键与equals()进行相等性比较

假设我有一个对象集合,可以根据对象的不同字段,使用许多不同的比较器对其进行排序。
稍后在代码中能够知道使用哪个比较器对集合进行排序,以及它是升序还是降序,这将是很好的。还有什么方法可以优雅地完成这项工作,而不是使用一堆布尔值来跟踪事情吗?

没有,没有任何实现可以做到这一点。你需要自己跟踪它。您可以对集合实现进行子类化,以添加包含此信息的字段

您还可以使用映射将实现映射到元数据,特别是您似乎希望IdentityHashMap这样做,因为您不希望将两个不同的集合作为键与equals()进行相等性比较


我将存储一个布尔值(升序/降序)和一个对用于排序的比较器的引用,如果这完全决定了排序的话。或者,如果它是按字段排序的,则可能存储一个命名该字段的字符串。

不适用于收集接口,但如果您使用的是comparator()方法,您可以在其中请求其comparator

否则,您必须对用于添加所需访问器的集合类进行子类化。

确定:

为您的
收藏定义方法


列表中返回当前正在使用的
比较器。如果要修改在对象生命周期中可能使用的比较器,可以使用
映射和一些合理的键(例如,枚举-甚至可能是实现比较器的枚举),使其更为奇特,但我认为以上是一个足够好的开始。

但是,您也希望键较弱,因此,当收集对象被收集时,映射条目将消失。我投票支持Google Collections的弱键并发地图。我的意思是一次只能有一个比较器,但可以是基于不同字段的任何比较器。谢谢
public List<Comparator<Foo>> getComparators() { ... }
public int whichComparator() { ... }