как отсортировать вектор хеш-карт - PullRequest
0 голосов
/ 20 октября 2011

У меня есть вектор Hashmap, и HashMap содержит разные типы данных:

Vector<HashMap<String, Object>> theVector= new Vector<HashMap<String, Object>>();

theResults содержит этот HashMap:

HashMap<String, Object> theHashMap= new HashMap<String, Object>();

theHashMap содержит эти данные:цикл for)

//1st set

theHashMap.put("BLDG_ID", 111); //int
theHashMap.put("EMP_NAME", "AAA"); //String
theHashMap.put("FLAG", true); //boolean

theVector.add(theHashMap);

//2nd set

theHashMap.put("BLDG_ID", 222); //int
theHashMap.put("EMP_NAME", "BBB"); //String
theHashMap.put("FLAG", false); //boolean

theVector.add(theHashMap);

//2nd set<br>
theHashMap.put("BLDG_ID", 111); //int
theHashMap.put("EMP_NAME", "CCC"); //String
theHashMap.put("FLAG", false); //boolean

theVector.add(theHashMap);

Я хочу отсортировать содержимое моего вектора HashMap в соответствии с BLDG_ID, чтобы при отображении данных оно выглядело как

BLDG_ID || EMP_NAME
111     ||    AAA
111     ||    CCC
222     ||    BBB

Как мне это сделать?

Ответы [ 3 ]

2 голосов
/ 20 октября 2011

Я думаю, вам было бы гораздо лучше сделать что-то вроде этого: вместо того, чтобы использовать хеш-карту для ваших значений, просто создайте класс.Тогда вы получите compile time checking на свои операции, что поможет предотвратить ошибки в будущем.

class Employee implements Comparable<Employee> {
    int buildingId;
    String name;
    boolean flag;

    Employee(int b, String n, boolean f) {
        buildingId = b;
        name = n;
        flag = f;
    }

    public int compareTo(Employee other) {
        if(other.buildingId == this.buildingId) 
            return name.compareTo(other.name);
        return buildingId - other.buildingId; // potential for overflow, be careful
    }

}

Тогда вы можете просто отсортировать вектор, используя любую сортировку, какую захотите.Если вы используете ArrayList (современная форма Vector), вы можете использовать Collections.sort(myList);

List<Employee> emps = new ArrayList<Employee>();
emps.add(new Employee(111,"AAA",true));
emps.add(new Employee(111,"CCC",false));
emps.add(new Employee(111,"BBB",false));

Collections.sort(emps);
System.out.println("Building Id,Employee Name");
for(Employee emp : emps) System.out.println(emp.getCSV()); // or however you want to format it
1 голос
/ 20 октября 2011
List<Map<String, Object>> vector = new Vector<Map<String, Object>>();

Collections.sort(vector, new Comparator<Map<String, Object>>() {
    @Override
    public int compare(Map<String, Object> map1, Map<String, Object> map2) {
        return ((Integer) map1.get("BLDG_ID")).compareTo((Integer) map2.get("BLDG_ID")));
    }            
});

Обновление: Для вашего кода:

После «последнего» * ​​1006 *

theVector.add(theHashMap);

добавить следующее

Collections.sort(theVector, new Comparator<HashMap<String, Object>>() {
        @Override
        public int compare(HashMap<String, Object> o1, HashMap<String, Object> o2) {
            return ((Integer) o1.get("BLDG_ID")).compareTo((Integer) o2.get("BLDG_ID"));
        }            
    });
1 голос
/ 20 октября 2011

Реализуйте пользовательский Comparator<Map<String, Object>>, затем вызовите Collections.sort

Примечание. Возможно, вы захотите использовать ArrayList вместо Vector.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...