使用java8 Lambda对List对象的常用操作

实体类

准备数据

/**
 * 使用lambda表达式对list对象进行操作
 */
public class Student {
    private String name;

    private String sex;

    private int age;

    public Student(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<Student> students = new ArrayList<>();

        students.add(new Student("李四","女",18));
        students.add(new Student("王五","男",6));
        students.add(new Student("张三","男",12));
        students.add(new Student("赵六","男",40));


}

获取对象某一属性list

 //获取对象中name属性的值,并放入新的list集合中
        List<String> nameList = students.stream().map(Student::getName).collect(Collectors.toList());
       
        //获取对象中age属性的值,并放入新的list集合中
        List<Integer> ageList = students.stream().map(Student::getAge).collect(Collectors.toList());
      

获取list对象中姓名为张三的对象,如果对象中存在多个张三,取的是第一次出现的对象

//这样取值会有一个问题,如果没找到,就会报“ No value present ”异常,因此建议使用下面这种方式
        Student listOperate = students.stream().filter(i -> i.getName().equals("张三")).findFirst().get();
       

        //使用这个方法可以避免未获取到对象时报“ No value present ”异常,或者想要捕获进行自定义异常处理可以使用下面的方法
        Optional<Student> optional = students.stream().filter(i -> i.getName().equals("赵六1")).findFirst();
        if (optional.isPresent()) {
            Student operate = optional.get();
        
        }else {
            System.out.println("未找到对象");
        }
        //使用这种写法可以捕获自定义异常
        Student operate = students.stream().filter(i -> i.getName().equals("赵六1"))
                .findFirst().orElseThrow(() -> new RuntimeException("获取名字为赵六1的学生失败"));
      

获取list对象中性别为男的对象,放入新的map集合,已name为key,age为value存放

 Map<String, Integer> mapStream = students.stream().filter(i -> i.getSex().equals("男"))
                .collect(Collectors.toMap(Student::getName, Student::getAge));

过滤数据

List<Student> operateList = students.stream().filter(i -> i.getSex().equals("男")).collect(Collectors.toList());
        operateList.forEach(i-> System.out.println(i.getName() + ":" + i.getAge() + ":" + i.getSex()));

猜你喜欢

转载自blog.csdn.net/liuerchong/article/details/129878750