java - 获取具有多个属性的枚举列表并将它们放入 ArrayList 或 HashMap?
问题描述
我有一个枚举类的人,每个人的枚举被定义为:
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 代表同一个人 Joe 的数据,但年龄/职业不同。如何制作名称的 ArrayList 或 Hashmap/表以及可以通过人名搜索的不同年龄/职业?
所以我不确定数据结构会是什么样子,或者即使它是正确的,但我希望能够搜索一个名字并获得与该名字相关的每个年龄和职业值,所以例如我会搜索“乔”并得到这个返回:
Joe-31-Engineer
Joe-35-Manager
对于 Sam 的值,存在重复值,但当我搜索 Sam 的名字“Sam”时,我仍然希望能够看到它们:
Sam-22-Student
Sam-22-Student
Sam-23-Student
Sam-30-lawyer
Sam-45-judge
解决方案
您可以在枚举中创建一个静态变量,该变量由以下人员组初始化personName
:
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");
推荐阅读
- firebase - React Native Firebase - signInWithPhoneNumber 不返回确认结果
- javascript - 输入到文本区域
- android - Android 蓝牙 HCI:蓝牙控制器如何与 DSP 通信?
- powershell - Powershell 中的“Get-FileMetaData”不是 Cmdlet
- javascript - ReactJS 分页
- http - 获取 SocketException:操作系统错误:连接超时,errno = 110,地址 = 10.0.2.2,端口 = 47732
- reactjs - 如何在 AWS Beanstalk 上将 React 的 process.env.NODE_ENV 设置为生产环境
- unity3d - 获取整数中的数字而不转换为字符串
- flutter - 出现错误:参数类型“对象?” 不能分配给参数类型“地图”
' - angular - 角度模板函数调用