Java基于ArrayList实现年龄筛选 查找联系人列表最年长最年幼人员姓名
查询联系人列表最大/最小年龄人员方法实现
方法1:使用Java Stream API实现(简洁写法)
// 返回值:索引0为年龄最大的人员姓名,索引1为年龄最小的人员姓名 public String[] getMaxMinAgeName(ArrayList<Contato> contatoList) { // 处理空列表边界 if (contatoList == null || contatoList.isEmpty()) { return new String[]{"列表为空", "列表为空"}; } // 查找年龄最大的联系人 Contato maxAgeContato = contatoList.stream() .max((c1, c2) -> Integer.compare(c1.getIdade(), c2.getIdade())) .get(); // 查找年龄最小的联系人 Contato minAgeContato = contatoList.stream() .min((c1, c2) -> Integer.compare(c1.getIdade(), c2.getIdade())) .get(); return new String[]{maxAgeContato.getNome(), minAgeContato.getNome()}; }
方法2:单次遍历实现(性能更优,适合大列表场景)
public String[] getMaxMinAgeName(ArrayList<Contato> contatoList) { if (contatoList == null || contatoList.isEmpty()) { return new String[]{"列表为空", "列表为空"}; } Contato maxAgeContato = contatoList.get(0); Contato minAgeContato = contatoList.get(0); for (Contato contato : contatoList) { if (contato.getIdade() > maxAgeContato.getIdade()) { maxAgeContato = contato; } if (contato.getIdade() < minAgeContato.getIdade()) { minAgeContato = contato; } } return new String[]{maxAgeContato.getNome(), minAgeContato.getNome()}; }
调用示例
直接传入指定列表查询
// 查询Familia列表的最大、最小年龄人员姓名 String[] result = getMaxMinAgeName(Familia); System.out.println("年龄最大:" + result[0] + ",年龄最小:" + result[1]);
适配按日程名称查询的封装
public String[] getMaxMinAgeByAgenda(String nomeAgenda) { switch (nomeAgenda) { case "Familia": return getMaxMinAgeName(Familia); case "Amigos": return getMaxMinAgeName(Amigos); case "Profissional": return getMaxMinAgeName(Profissional); default: throw new RuntimeException("无效的日程名称"); } }
现有代码优化提示
- 字符串内容比较不要用
==,要使用equals()方法,比如adicionaContato方法里的nomeAgenda == "Familia"需要修改为nomeAgenda.equals("Familia") eliminaContato方法中getFamilia().contains(nomeContato)逻辑错误,contains判断的是Contato对象本身,不是姓名属性,需要遍历列表对比每个对象的nome属性后再执行删除GestaoContatos和Contato不存在is-a的继承关系,建议去掉继承逻辑
内容的提问来源于stack exchange,提问作者Ozzott
相关产品推荐
相关产品推荐

