如何从键为String、值为ArrayList<Person>的HashMap中获取单个属性值
解决方案:拆分findPhone和findMail方法
首先得明确你的场景:这个HashMap是用姓氏(lname)作为键,对应一组同姓氏的Person对象(因为值是ArrayList<Person>),所以我们的方法需要考虑一个姓氏对应多个人的情况,下面是具体实现:
1. 先给Person类补充必要的getter方法
因为要获取phone和mail属性,你的Person类得有对应的getter(不然没法访问私有属性):
public class Person { private int phone; private String mail; public Person(int phone, String mail) { this.phone = phone; this.mail = mail; } // 新增getter方法 public int getPhone() { return phone; } public String getMail() { return mail; } }
2. 实现findPhone方法
这个方法会根据传入的lname,遍历对应列表里的所有Person,输出每个人的手机号:
protected void findPhone(String lname) { if (person.containsKey(lname)) { ArrayList<Person> personList = person.get(lname); System.out.println(lname + " 的所有手机号:"); for (Person p : personList) { System.out.println("- " + p.getPhone()); } } else { System.out.println("未找到姓氏为 " + lname + " 的记录"); } }
3. 实现findMail方法
逻辑和findPhone完全一致,只是获取的是邮箱属性:
protected void findMail(String lname) { if (person.containsKey(lname)) { ArrayList<Person> personList = person.get(lname); System.out.println(lname + " 的所有邮箱:"); for (Person p : personList) { System.out.println("- " + p.getMail()); } } else { System.out.println("未找到姓氏为 " + lname + " 的记录"); } }
额外说明:如果每个lname只对应一个Person
如果你的业务场景里,一个姓氏只会对应一个Person对象,那可以简化代码,直接取列表的第一个元素:
// 简化版findPhone(单个Person场景) protected void findPhone(String lname) { if (person.containsKey(lname) && !person.get(lname).isEmpty()) { Person p = person.get(lname).get(0); System.out.println(lname + " 的手机号:" + p.getPhone()); } else { System.out.println("未找到姓氏为 " + lname + " 的记录"); } }
这样就可以精准输出你需要的单个属性值啦!
内容的提问来源于stack exchange,提问作者IMBABOT
相关产品推荐
相关产品推荐

