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

这篇具有很好参考价值的文章主要介绍了使用Lambda获取List对象中某一个属性以及获取特定条件下的属性对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

如下所示文章来源地址https://www.toymoban.com/news/detail-616104.html

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

}

到了这里,关于使用Lambda获取List对象中某一个属性以及获取特定条件下的属性对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何使用C#中的Lambda表达式操作Redis Hash结构,简化缓存中对象属性的读写操作

    Redis是一个开源的、高性能的、基于内存的键值数据库,它支持多种数据结构,如字符串、列表、集合、散列、有序集合等。其中,Redis的散列(Hash)结构是一个常用的结构,今天跟大家分享一个我的日常操作,如何使用Redis的散列(Hash)结构来缓存和查询对象的属性值,以

    2024年02月16日
    浏览(57)
  • 检查一个Java List是否包含某个JavaBean对象的特定值,并且获取这个值

    在这个例子中,我们使用了Java 8的 Optional 类来处理可能不存在的结果。如果找到了匹配的Bean对象,我们可以使用 get() 方法获取它,并打印出其名称。如果没有找到匹配的Bean对象, isPresent() 方法将返回 false ,我们将打印出相应的消息。

    2024年01月24日
    浏览(50)
  • Vue3前端开发,如何获取组件内dom对象以及子组件的属性和方法

    Vue3前端开发,借助Ref来获取组件内dom对象,借助defineExpose编译宏可以获取到子组件的属性和方法。 app入口文件,我们作为父组件,在里面调用了自定义组件TestCom.vue。 先做了一个测试,借助于ref来访问自身的dom对象。如图所示是可以拿到的。 ref又称谓钩子函数,在vue2版本中

    2024年01月22日
    浏览(60)
  • JAVA 使用stream流将List中的对象某一属性创建新的List

    Java Stream是Java 8引入的一种新机制,它可以让我们以声明式方式操作集合数据,提供了更加简洁、优雅的集合处理方式。Stream是一个来自数据源的元素队列,并支持聚合操作。它的特点有: Stream 不会修改原始数据源。 Stream 操作是延迟执行的。 Stream 操作可以是无限的(比如

    2024年02月03日
    浏览(56)
  • list对象中如何根据对象中某个属性去重使用Java8流实现

    在 Java 8 的流操作中,可以使用 distinct 方法来对一个对象流进行去重,但是默认情况下它会使用对象的 equals() 方法来判断重复。如果你希望根据对象的某个属性进行去重,则可以使用 distinct 方法结合 map 方法来实现。 下面是一个示例代码,假设你有一个 List 对象 list,其中包

    2024年02月11日
    浏览(51)
  • Mybatis传递实体对象只能直接获取,不能使用对象.属性方式获取

    mybatis的自动识别参数功能很强大,pojo实体类可以直接写进mapper接口里面,不需要在mapper.xml文件中添加paramType,但是加了可以提高mybatis的效率

    2024年02月09日
    浏览(61)
  • 通过Lambda函数的方式获取属性名称

    最近在使用 mybatis-plus 框架, 常常会使用lambda的方法引用获取实体属性, 避免出现大量的魔法值. 那么在我们平时的开发过程中, 常常需要用到java bean的属性名, 直接写死属性名字符串的形式容易产生bug, 比如属性名变化, 编译时并不会报错, 只有在运行时才会报错该对象没有指定

    2024年02月08日
    浏览(36)
  • stream流的使用-获取list集合中对象的单个字段list集合,进行累加操作

    场景及代码案例源于实际项目 现存一list集合,其中保存了投资人的信息。 Person (name, age, money rateOfReturn) 其中的money表示投资人现有资产,rateOfReturn表示投资年回报率 需求: 1.计算投资人年龄之和; 2.根据现有资产及投资回报率,计算所有投资人一年后的资产总和; 实体

    2023年04月22日
    浏览(63)
  • 【iOS分类、关联对象】如何使用关联对象给分类实现一个weak的属性

    如何使用关联对象给分类实现一个weak的属性 通过关联对象objc_setAssociatedObject中的策略policy可知,并不支持使用weak修饰对象属性: 思考:能否用assign实现? weak和assign的区别如下: **assign:**对应的所有权类型为__unsafe_unretained,当修饰对象的时候,修饰的指针指向该对象,不

    2024年02月21日
    浏览(42)
  • Stream流 - 两个list集合对象属性的合并、对象属性值运算

    📅 合并两个 list<map>, 并将 userId 相同的所有属性合并到一个 map 中 list1中对象的属性:userId、userName list2中对象的属性:userId、gender、age 📌 最终总集合中对象的属性:userId、userName、gender、age 运行结果: 结果可见,userId 相同的所有属性合并到集合 list1中。 📅 合并两个

    2024年02月06日
    浏览(129)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包