要获取具有多个属性的枚举列表并将它们放入ArrayList或HashMap中?

时间:2019-02-24 05:13:21

标签: java arraylist enums hashmap hashtable

我有一个People的Enum类,每个人的enum定义为:

enumName(String name, String age, String Occupation)

示例:

public enum People{
    Joe1("Joe","31","Engineer"),
    Joe2("Joe","35","Manager"),
    Sam1("Sam", "22", "Student"),
    Sam1("Sam", "22", "Student"),
    Sam1("Sam", "23", "Student"),
    Sam2("Sam", "30", "lawyer"),
    Sam3("Sam", "45", "judge");
}

Joe1和Joe2代表同一个人(乔)的数据,但年龄/职业不同。我如何制作一个ArrayList或Hashmap /表中的姓名,以及可以通过该人的姓名搜索的不同年龄/职业?

所以我不确定数据结构是什么样,即使它是正确的结构,但我希望能够搜索一个名称并获取与该名称相关的每个年龄和职业值,例如我将搜索“ Joe”并获得此返回:

Joe-31-Engineer
Joe-35-Manager

对于Sam的值,有重复项,但是当我搜索Sam的名字“ Sam”时,我仍然希望能够看到它们:

 Sam-22-Student
 Sam-22-Student
 Sam-23-Student
 Sam-30-lawyer
 Sam-45-judge

2 个答案:

答案 0 :(得分:2)

您可以在枚举中创建一个静态变量,该变量由personName的people组初始化:

enum People {
    Joe1("Joe", "31", "Engineer"), 
    Joe2("Joe", "35", "Manager"), 
    Sam1("Sam", "22", "Student"),
    Sam2("Sam", "30", "lawyer"), 
    Sam3("Sam", "45", "judge");

    private String personName;
    private String age;
    private String occupations;

    private static Map<String, List<People>> byName;

    static {
        byName = Arrays.stream(values())
                .collect(Collectors.groupingBy(People::getPersonName, 
                          Collectors.toList()));
    }

    People(String personName, String age, String occupations) {
        this.personName = personName;
        this.age = age;
        this.occupations = occupations;
    }
    public static List<People> getByName(String personName) {
             return byName.get(personName);
    }
}

然后您可以使用以下声明按名称搜索人员(年龄,职业):

 List<People> p = People.getByName("Joe");

答案 1 :(得分:0)

您可以拥有一个Map<String, List<People>>。对于每个名称,您将有一个对应的值,该值是具有该名称的enum值的列表。同一名称的枚举值也不能超过一个,因此只能有一个Sam1