如何在java bean中实现基于map键的泛型排序?

时间:2014-07-22 10:41:15

标签: java sorting collections

我有一个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 

请告知如何操作

2 个答案:

答案 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
    }
}