如何按具有ID的Employee的值对HashMap排序?

时间:2018-12-22 05:39:33

标签: java

我正在创建一个Hashmap对象,其键为Employee名称,值为Employee对象,其属性为name,id和age。如何按哈希值对具有员工ID的值进行排序?

4 个答案:

答案 0 :(得分:2)

您可以创建一个TreeMap而不是Hashmap

将“雇员ID”作为键输入到TreeMap中,并将“雇员”对象作为值。(因为您要根据到员工ID,并且员工ID在您的上下文中似乎是唯一的。)

TreeMap<Integer, EmpObj> map = new TreeMap<>();

如果您无法更改地图ID,则可以按值对哈希图进行排序。 请参阅this link

答案 1 :(得分:0)

是的,您可以按键排序。就像其他人建议的那样,您可以使用TreeMap保持键的排序。

例如,此代码将按其键对所有元素进行排序:

import java.util.Map;
import java.util.TreeMap;

public class Stack {

    public static void main(String args[]){

        TreeMap<Integer, String> map = new TreeMap<>();
        map.put(10,"Daniel");
        map.put(4,"Peter");
        map.put(1,"Claudia");

        for(Map.Entry<Integer,String> entry : map.entrySet()){
            System.out.println(entry.getKey() +" -> "+entry.getValue());
        }
        /* it will print to console:
        1 -> Claudia
        4 -> Peter
        10 -> Daniel 
        */
    }
}

答案 2 :(得分:0)

HashMaps是无序的。将密钥设置为Id。地图将如下所示,

Map<Integer, EmployeeDTO> map = new HashMap<>();

您可以根据以下键对地图进行排序,

SortedMap<Integer, EmployeeDTO> sortedMap = new TreeMap<Integer, EmployeeDTO>(map);

如果您确实需要将名称保留为键并按ID排序,并且您使用的是Java 8,则可以使用以下方式,

Stream<Map.Entry<K,V>> sorted =
    map.entrySet().stream()
       .sorted(Map.Entry.comparingByValue(comparator));

您可以创建为的比较器

public class EmployeeComparator implements Comparator<EmployeeDTO>{

    @Override
    public int compare(EmployeeDTO employeeDTO1, EmployeeDTO employeeDTO2) {

        try {
            if(employeeDTO1!=null && employeeDTO2!=null && 
                    employeeDTO1.getId()!=null && employeeDTO2.getId()!=null){
                try {
                    return Integer.parseInt(employeeDTO1.getId()) - Integer.parseInt(employeeDTO2.getId());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return 0;
    }

}

答案 3 :(得分:-1)

Hashmap不能排序。有一个接口SortedMap及其实现之一-TreeMap,但是它对而不是值进行排序。因此,您的结果图将按员工姓名排序。

另一方面,您可以使用LinkedHashMap并根据规则插入新值,但是我认为这不是您真正想要的。