使用Lambda获取List对象中某一个属性以及获取特定条件下的属性对象

时间:2025-03-22 07:40:22
/** * 使用lambda表达式对list对象进行操作 */ public class ListOperate { private String name; private String sex; private int age; public ListOperate(String name, String sex,int age) { this.name = name; this.sex = sex; this.age = age; } public String getName() { return name; } public String getSex() { return sex; } public int getAge() { return age; } public void setName(String name) { this.name = name; } public void setSex(String sex) { this.sex = sex; } public void setAge(int age) { this.age = age; } public static void main(String[] args) { List<ListOperate> listOperates = new ArrayList<>(); listOperates.add(new ListOperate("李四","女",18)); listOperates.add(new ListOperate("王五","男",6)); listOperates.add(new ListOperate("张三","男",12)); listOperates.add(new ListOperate("赵六","男",40)); //获取对象中name属性的值,并放入新的list集合中 List<String> nameList = listOperates.stream().map(ListOperate::getName).collect(Collectors.toList()); for (String s : nameList) { System.out.println("姓名为:"+s); } //获取对象中age属性的值,并放入新的list集合中 List<Integer> ageList = listOperates.stream().map(ListOperate::getAge).collect(Collectors.toList()); for (Integer s : ageList) { System.out.println("年龄为:"+s); } //获取list对象中姓名为张三的对象,如果对象中存在多个张三,取的是第一次出现的对象,可以理解为出现姓名为张三的对象呢,就会终止向下查找 //这样取值会有一个问题,如果没找到,就会报“ No value present ”异常,因此建议使用下面这种方式 ListOperate listOperate = listOperates.stream().filter(i -> i.getName().equals("张三")).findFirst().get(); System.out.println(listOperate.getName()); //使用这个方法可以避免未获取到对象时报“ No value present ”异常,或者想要捕获进行自定义异常处理可以使用下面的方法 Optional<ListOperate> optional = listOperates.stream().filter(i -> i.getName().equals("赵六1")).findFirst(); if (optional.isPresent()) { ListOperate operate = optional.get(); System.out.println(operate.getName()); }else { System.out.println("未找到对象"); } //使用这种写法可以捕获自定义异常 ListOperate operate = listOperates.stream().filter(i -> i.getName().equals("赵六1")) .findFirst().orElseThrow(() -> new RuntimeException("获取名字为赵六1的学生失败")); System.out.println(operate.getName()); //获取list对象中性别为男的对象,放入新的map集合,已name为key,age为value存放 Map<String, Integer> mapStream = listOperates.stream().filter(i -> i.getSex().equals("男")) .collect(Collectors.toMap(ListOperate::getName, ListOperate::getAge)); for (Map.Entry<String,Integer> map:mapStream.entrySet()){ System.out.println("姓名:"+map.getKey()+"年龄:"+map.getValue()); } //获取list中性别为男的对象,放入新的list对象中 List<ListOperate> operateList = listOperates.stream().filter(i -> i.getSex().equals("男")).collect(Collectors.toList()); operateList.forEach(i-> System.out.println(i.getName() + ":" + i.getAge() + ":" + i.getSex())); } }