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

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

使用Lambda表达式需要jdk1.8以上的环境

获取List对象中的某一个属性

如下所示

/**
 * 使用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()));
    }

}
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值