java8,stream之filter简单介绍 - 编程思维

简述

Java8出了个Stream流、让原本对集合类操作很笨拙的写法,变得很流畅!相信在Stream没有出生之前我们对集合做一些累加、过滤、等一些操作都是for for 一路的 forrr到底!代码量也是够大!写过php的同学都用过Collection类的流式操作,真是顺畅!本文是带大家介绍下Stream里Filter的一些基本用法!

准备代码

class Person {
    private String name;
    private int age;

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

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    // getter setter
}
//搞几个数据
public List<Person> personList() {
    List<Person> list = new ArrayList<>();
    list.add(new Person("Lily", 12));
    list.add(new Person("HanMei", 10));
    list.add(new Person("Lucy", 15));
    list.add(new Person("Lilei", 10));

    return list;
}

Filter

基本过滤

Java8的lambda很方便的让我们可以先申明一个变量指向一个函数,这种写法在很多编程语言里都支持,只是写法不一。在php里就叫匿名函数

@Test
public void test_filter() {

    Predicate<Person> nameFilter = (person) -> person.getName().contains("Li");

    List<Person> containsLi = personList().stream()
            .filter(nameFilter)
            .collect(Collectors.toList());

    System.out.println(containsLi);
}

上面的例子是过滤出personList里带有Li字符的人的集合,用法很简单。

多条件过滤

@Test
public void test_multi_filter() {
    Predicate<Person> nameFilter = (person) -> person.getName().contains("Li");
    Predicate<Person> ageFilter = (person) -> person.getAge() >= 12;

    // 这里你可以用and 、isEqual
    List<Person> multiPerson = personList().stream()
            .filter(nameFilter.or(ageFilter))
            .collect(Collectors.toList());

    System.out.println(multiPerson);
}

可以看到,采用了多条件链式调用的方法,传递了多个判断逻辑,是不是很好用呢!

代码在GitHub

版权声明:本文版权归作者所有,遵循 CC 4.0 BY-SA 许可协议, 转载请注明原文链接
https://segmentfault.com/a/1190000040580099

java开发工程师进阶篇-java8的stream流使用技巧 - 编程思维

作者:幻好来源:恒生LIGHT云社区什么是流?流是 Java8 引入的全新概念,它用来处理集合中的数据,暂且可以把它理解为一种高级集合。众所周知,集合操作非常麻烦,若要对集合进行筛选、投影,需要写大量的代码,而流是以声明的形式操作集合,它就像 SQL 语句,我们只需告诉流需要对集合进行什么操作,它就会自动进行操作,并将

stream.map 和 stream.foreach 的区别 - 编程思维

网上很多关于讲解这俩个区别的文章,但大多数要么不明不白,要么太复杂难理解。所以自己通俗的讲一下,毕竟不会太深奥,只是个人理解。什么是 stream 流我们在使用集合或数组对元素进行操作时往往会遇到这种情况:通过对不同类型的存储元素,按照特定条件进行查找、排序、等操作时往往会写一大段代码,而且更要命的是,不同类型的数据,

java培训stream遍历树形结构案例分享 - 编程思维

可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中的Stream流一次性把数据查出来,然后通过流式处理,我们一起来看看,代码实现为了实现简单,就模拟查看数据库所有数据到List里面_java培训。实体类:Menu.java/**Menu*

netty系列之:基于流的数据传输 - 编程思维

简介我们知道由两种数据的传输方式,分别是字符流和字节流,字符流的意思是传输的对象就是字符串,格式已经被设置好了,发送方和接收方按照特定的格式去读取就行了,而字节流是指将数据作为最原始的二进制字节来进行传输。今天给大家介绍一下在netty中的基于流的数据传输。package和byte熟悉TCP/IP协议的同学应该知道,在

基础篇:java.stream函数,优雅的数据流操作 - 编程思维

前言平时操作集合数据,我们一般都是for或者iterator去遍历,不是很好看。java提供了Stream的概念,它可以让我们把集合数据当做一个个元素在处理,并且提供多线程模式流的创建流的各种数据操作流的终止操作流的聚合处理并发流和CompletableFuture的配合使用关注公众号,一起交流,微信搜一搜: 潜行前行

jdk8 stream性能测试,看看到底有多快 - 编程思维

送大家以下学习资料,文末有领取方式JDK8 Stream 数据流效率分析Stream 是Java SE 8类库中新增的关键抽象,它被定义于 java.util.stream (这个包里有若干流类型:Stream<T> 代表对象引用流。此外还有一系列特化流,如 IntStream,LongStream,Dou

坏了!面试官问我垃圾回收机制 - 编程思维

面试官:我还记得上次你讲到JVM内存结构(运行时数据区域)提到了「堆」,然后你说是分了几块区域嘛面试官:当时感觉再讲下去那我可能就得加班了面试官:今天有点空了,继续聊聊「堆」那块吧候选者:嗯,前面提到了堆分了「新生代」和「老年代」,「新生代」又分为「Eden」和「Survivor」区,「survivor」区又分为「Fr

向工程腐化开炮 | java代码治理 - 编程思维

作者:刘天宇(谦风)系列文章回顾《向工程腐化开炮 | proguard治理》《向工程腐化开炮 | manifest治理》。本文为系列文章第三篇,虽然标题是java代码,但准确来讲,本文主要聚焦的是jvm字节码,因此相关工具和治理,对于kotlin也同样适用,如无特殊情况,不再单独说明。此外,还会涉及到java资源。ja

java hashmap源码解析 - 编程思维

注:此文针对jdk1.8下的源码进行分析,不同jdk版本下的HashMap会略有不同背景介绍哈希表的实现主要分为两大类:开放寻址法和拉链法。而在Java源码中,HashMap的实现可归为拉链法这一大类中。本文将依照Java源码,将jdk1.8实现的HashMap的种种细节进行分析。源码分析 /** *

optionalの应用 && flatmap和map的区别 - 编程思维

从 Java 8 引入的一个很有趣的特性是 Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。Optio

日期api - 编程思维

JAVA8实战 - 日期API前言​ 这一节我们来讲讲JAVA8的日期类,源代码的作者其实就是Joda-Time,所以可以看到很多代码的API和Joda类比较像。日期类一直是一个比较难用的东西,但是JAVA8给日期类提供了一套新的API让日期类更加好用。​ 本文代码较多,建议亲自运行代码理解。内容概述:关于