Java集合Stream类filter的使用

Java集合Stream类filter的使用之前的Java集合中removeIf的使用一文写了使用removeIf来实现按条件对集合进行过滤。这篇文章使用同样是JDK1.8新加入的Stream中filter方法来实现同样的效果。

大家好,又见面了,我是你们的朋友全栈君。

之前的Java集合中removeIf的使用一文写了使用removeIf来实现按条件对集合进行过滤。这篇文章使用同样是JDK1.8新加入的Streamfilter方法来实现同样的效果。并且在实际项目中通常使用filter更多。关于Stream的详细介绍参见Java 8系列之Stream的基本语法详解
同样的场景:你是公司某个岗位的HR,收到了大量的简历,为了节约时间,现需按照一点规则过滤一下这些简历。比如要经常熬夜加班,所以只招收男性

//求职者的实体类
public class Person { 
   
    private String name;//姓名
    private Integer age;//年龄
    private String gender;//性别

    ...
    //省略构造方法和getter、setter方法
    ...

    //重写toString,方便观看结果
    @Override
    public String toString() { 
   
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }
}

这里就不展示使用传统Iterator来进行过滤了,有需要做对比的可以参见之前的Java集合中removeIf的使用
使用Streamfilter进行过滤,只保留男性的操作:

Collection<Person> collection = new ArrayList();
collection.add(new Person("张三", 22, "男"));
collection.add(new Person("李四", 19, "女"));
collection.add(new Person("王五", 34, "男"));
collection.add(new Person("赵六", 30, "男"));
collection.add(new Person("田七", 25, "女"));

Stream<Person> personStream = collection.stream().filter(new Predicate<Person>() { 
   
    @Override
    public boolean test(Person person) { 
   
         return "男".equals(person.getGender());//只保留男性
    }
});

collection = personStream.collect(Collectors.toList());//将Stream转化为List
System.out.println(collection.toString());//查看结果

运行结果如下:

[Person{name=‘张三’, age=22, gender=‘男’}, Person{name=‘王五’, age=34, gender=‘男’}, Person{name=‘赵六’, age=30, gender=‘男’}]
Process finished with exit code 0

上面的demo没有使用lambda表达式,下面的demo使用lambda来进一步精简代码:

Collection<Person> collection = new ArrayList();
collection.add(new Person("张三", 22, "男"));
collection.add(new Person("李四", 19, "女"));
collection.add(new Person("王五", 34, "男"));
collection.add(new Person("赵六", 30, "男"));
collection.add(new Person("田七", 25, "女"));

Stream<Person> personStream = collection.stream().filter(
        person -> "男".equals(person.getGender())//只保留男性
);

collection = personStream.collect(Collectors.toList());//将Stream转化为List
System.out.println(collection.toString());//查看结果

效果和不用lambda是一样的。

不过读者在使用filter时不要和removeIf弄混淆了:

  • removeIf中的test方法返回true代表当前元素会被过滤掉
  • filter中的test方法返回true代表当前元素会保留下来
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131333.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 设备驱动基础学习–platform driver简单实现「建议收藏」

    设备驱动基础学习–platform driver简单实现「建议收藏」设备驱动基础学习–platformdriver简单实现

    2022年7月4日
    20
  • TextCNN(文本分类)

    TextCNN(文本分类)TextCNN网络结构如图所示:利用TextCNN做文本分类基本流程(以句子分类为例):(1)将句子转成词,利用词建立字典(2)词转成向量(word2vec,Glove,bert,nn.embedding)(3)句子补0操作变成等长(4)建TextCNN模型,训练,测试TextCNN按照流程的一个例子。1,预测结果不是很好,句子太少2,没有用到复杂的word…

    2022年6月28日
    20
  • Python保留小数的方法

    Python保留小数的方法方法一、使用字符串格式化保留n位小数,并做四舍五入处理s=12.3445print(‘%.2f’%s)#12.34s=12.345print(‘%.2f’%s)#12.35方法二、使用round内置函数(会四舍五入)s=12.345a=round(s,2)print(a)#12.35s=12.3445a=round(s,2)print(a)#12.34方法三、使用decimal模块(四舍五入)fromdecimalimportDec

    2022年8月12日
    0
  • 【UVA】11732 – strcmp() Anyone?

    【UVA】11732 – strcmp() Anyone?

    2022年2月2日
    53
  • java基本数据类型总结

    java基本数据类型总结详解一、八种基本数据类型常识1.1、基本常识表对于上图有以下几点需要注意:java八种基本数据类型分为四类八种,四类分别为整型、浮点型、布尔型、字符型;八种分别为byte、short、int、long、float、double、boolean、char;java八种基本数据类型的字节数:分别为1、2、4、8个字节;1字节(byte、boolean)、2字节(short、char)、4字节(int、float)、8字节(long、double);整数的默认类型为int,浮点数的默认类型为do

    2022年7月7日
    18

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号