Java 8 stream().filter()过滤器的使用

需求

现在有这么一个需求,在一个list数组里面存了一些数据,我想要取出特定条件下的数据。比如我想取出学生的年龄在10岁以上的,再比如想取出张三这个人的一些信息。

思路解决

如果想要拿到一组list中的一些数据,就是对数据进行一些筛选,我们的原生方法就是遍历list数组,然后作判断,拿出相应条件的数据。这是一种很麻烦的方法,所以在Java 8 就出现了一种很简单的方法,过滤器。只需要很简单的一行,就可以拿到你想要的数据。

具体代码讲解

package com.cc;

public class Person {

    private String name;

    private Integer age;


    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}



package com.cc;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class streamTest {
    public static void main(String[] args) {

        Person[] person = {new Person("moon",18), new Person("cc",3)};

        //将数组转成list
        List<Person> list = Arrays.asList(person);

        //一个条件筛选
        Person result1 = list.stream().filter(p -> "moon".equals(p.getName()))
                .findAny().orElse(null);//如果找不到数据会返回null。orElse()是设置找不到数据后的默认值。
        System.out.println(result1.getName());  //moon


        //多个条件筛选
        Person result2 = list.stream().filter(p -> "oo".equals(p.getName()) && 18 == p.getAge())
                .findAny().orElse(new Person("liang", 20));
        System.out.println(result2.getName());  //liang


        String name = list.stream().filter(p -> "moon".equals(p.getName())).map(Person::getName)
                .findAny().orElse("");  // moon
        System.out.println(name);


        List<String> names = list.stream().filter(p -> "moon".equals(p.getName())).map(Person::getName)
                .collect(Collectors.toList());
        names.forEach(System.out::println);   //moon
        
    }
}

总结

使用过滤器很容易就可以选出符合特定条件的数据,并且还减少了代码量。

补充

现在想提取出来name这一列,那么应该怎么做呢?

List<String> nameList = list.stream().map(Person::getName).collect(Collectors.toList());
  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值