我有一个实体需要按其三个属性进行多次分组,这样可以从左到右进行更精细的选择。假设我有这个课程:
public class Person {
private String gender;
private String state;
private String age;
}
每个属性可以多次保持相同的值,我想相应地对它们进行分组。所以最后我有以下数据结构:
m --> France --> 20 --> Person1
Person2
21 --> Person3
Person4
Germany --> 20 --> Person5
...
我希望你明白这个主意。目前,我使用深层嵌套的Map
构造来实现此目的:Map<String, Map<String, Map<String, Person>>>
然后我在这个答案中检查现有的密钥:Group by field name in Java对于每个级别的Map,最后将我的对象添加到“最深的”地图。
虽然尚未测试,但应该可以使用,但有没有更好的方法呢?与更易读或更快执行
一样由于它只有一个for
循环,执行时间应该是 O(n),这是非常好的,但是,这似乎不是最好的解决方案。
答案 0 :(得分:0)
您可以实现自定义Comparator
,仅比较您需要的属性和跳过其他属性。然后,您可以使用Collections.sort(list, comparator)
方法对对象进行排序
答案 1 :(得分:0)
如果您不需要层次结构,则可以使用列表并按标准的相反顺序对其进行3次排序。例如。你想要按州,年龄和性别排序,那么你需要先按性别排序,然后按年龄再按国家排序。
确保排序算法稳定,以便不改变等值条目的排序顺序。
如果使用Map,最好使用更明确的类型然后使用String。年龄应为整数类型,性别为枚举。状态可以是枚举或字符串,具体取决于您拥有多少以及您希望投入多少精力。