我有一个java bean命名文档,它有一个map:
private Map<String,Object> customProperties;
此地图中包含以下键:名称,ID,标题等....
并且地图也是通用的,因此您无法预测密钥。
我希望基于密钥进行泛型排序,以便我可以按名称,ID或标题对文档对象列表进行排序。
我看到的所有示例都是关于通过java bean中的属性名称进行泛型排序,但我找不到任何在对象内部按键排序的示例。
我希望能够做到这样的事情:
Collections.sort(documents, new GenericComparator("key_id", true));
// where key_id is a key inside the customProperties map;
// so that all the documents will be ordered based on the key_id
请告知如何操作
答案 0 :(得分:0)
private Map<String,Object> customProperties = new TreeMap<>();
可以按键的排序顺序(字符串值)检索条目。
使用Comparator的实现可以实现更加动态的方法:
public class Bean {
private String id;
private int value;
//...
}
public class GenComp<B, C extends Comparator<B>> {
public void sort( B[] beans, C comp ){
Arrays.sort( beans, comp );
}
public void sort( List<B> list, C comp ){
Collections.sort( list, comp );
}
}
class CompById implements Comparator<Bean> {
public int compare(Bean b1, Bean b2){
return b1.getId().compareTo( b2.getId() );
}
}
您也可以访问存储在Bean中的Map中的属性:
public int compare(Bean b1, Bean b2){
return b1.getProperty( "id" ).compareTo( b2.getProperty( "id" ) );
}
致电:
Bean[] beans = new Bean[]{ ... };
GenComp<Bean,CompById> gc = new GenComp<>();
gc.sort( beans, new CompById() );
实际上,GenComp类只是一个占位符,以防你想拥有不同的API,你可以在没有附加层的情况下调用Arrays.sort或Collections.sort。
答案 1 :(得分:0)
您需要实现Comparable界面并覆盖compareTo方法:
class Keys implements Comparable{
public int compareTo(String anotherKey){
//here you can compare the keys based on the number in the Key
}
}