stream().map((item) -> {}).collect();stream.filter;ObjectUtils.isEmpty

1.stream.filter

stream.filter一般适用于list集合,主要作用就是模拟sql查询,从集合中查询想要的数据。filter里面的参数user是指集合里面的每一项

 //在集合中查询用户名为huxiansen的集合
        List<User> userList = list.stream().filter(user -> "huxiansen".equals(user.getUsername())).collect(Collectors.toList());


        //在集合中查询出第一个用户密码为123456的用户
        Optional<User> user = list.stream().filter(userTemp -> "123456".equals(userTemp.getPassword())).findFirst();
 

过滤 , filter(item->{}) , item为每一项。 按照自己的需求来筛选list中的数据
List<Person> filterList = list.stream().filter(item->item.getAge()>3).collect(Collectors.toList());

map(), 提取对象中的某一元素,用每一项来获得属性(也可以直接用 ?对象::get属性())
List<String> mapList1 = list.stream().map(Person::getName).collect(Collectors.toList());
 

2.ObjectUtils.isEmpty

        String a=null;
        String b="xiaoxian";
        String c="";
String a = null ; 申明一个string类型的 a,同时在内存里申请了一个地址,但是该地址不指向任何引用地址;
String c = “” ;申明一个string类型的 a,既在内存里申请了地址,该地址又指向一个引用该字符串的引用地址;

如果我们使用isEmpty判断字符串是否为空

        System.out.println(a.isEmpty());
        System.out.println(b.isEmpty());
        System.out.println(c.isEmpty());

输出结果:

Exception in thread “main” java.lang.NullPointerException
at d.main(d.java:13)
false
true

第一个输出是空指针异常。

在springboot项目中我们可以使用org.springframework.util.ObjectUtils解决这个问题,

ObjectUtils.isEmpty底层实质就是和null进行比较

字符串的实质就是字符数组,也就是说该方法是用来判断该引用地址中是否存在值,前提条件是指向引用地址,但是null不会指向引用地址,就像地址表一样,地址表为空,自然报空指针异常。

3. stream().map((item) -> {}).collect()

假如存在对象数组A,包含一些属性,现在需要给A加一些属性,并输出对象数组B,涉及到两个知识点:(1)需要把A的对象挨个增加新的属性;(2)输出B,则需要把A的属性都复制到B。

要求:

①把A的属性复制过来
不能使用set方法一个一个复制,可以直接复制对象
BeanUtils.copyProperties(a, b);
②循环给B中的每个对象赋值name值
不能使用for循环遍历A里面的所有对象,那是java7的用法,java8用 stream().map.collect就可以了


有list对象数组A,有属性userId和model,现在需要输出对象数组B,数组B中包含所有A中的对象,但需要多一个属性nameList<B> listB = aList.stream().map(a->{
            B b = new B();
            String name;
            name = "XXXX";
            BeanUtils.copyProperties(a, b);
            b.setName(name);
            return b;
        }).collect(Collectors.toList());

4.例如

遍历a,将a中不为空的id都赋值给b中的id

idList<B> listB=alist.stream().filter(item->!ObjectUtils.isEmpty(item.getId())).map(a->{

            B b = new B();
            BeanUtils.copyProperties(a, b);
            b.setId(id);
            return b;

}).collect(Collectors.toList());

举例:

一张数据表user包括id,name,age,gender。

用List<User>装该数据表的全部数据,在这里我们假如直接获得这部分数据:

List<User> users = getUsers();

现在需要全部的name数据,我们可以:

List<String> names = users.stream().map(User::getName()).collect(Collectors.toList());

解释:

stream:stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等。对stream进行修改不会修改任何一个背后的数据源。

map:接收一个函数作为参数,该函数被应用到每个元素上,并将其映射成一个新的元素。

collect:属于terminal operation,必须加在后面,否则会报错。

Collectors.toList()用来结束Stream流。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值