lambda的聚合操作

管道是聚合操作的序列。如果正常用for语句来查找成员。例如,查找符合要求的男性成员:

                  

public class Person {

    public enum Sex {
        MALE, FEMALE
    }

    String name;
    LocalDate birthday;
    Sex gender;
    String emailAddress;
    
    // ...

    public int getAge() {
        // ...
    }

    public String getName() {
        // ...
    }
}

for语句的查询: 

for (Person p : roster) {
    if (p.getGender() == Person.Sex.MALE) {
        System.out.println(p.getName());
    }
}

 使用聚合操作的语句:聚合操作filter和foreach组成的管道来打印集合

roster
    .stream()
    .filter(e -> e.getGender() == Person.Sex.MALE)
    .forEach(e -> System.out.println(e.getName()));
  • 。源可以是一个集合、一个数组、一个生成器函数或一个I/O通道。在本例中,源是集合roster。
  • 零个或多个中间操作
    中间操作,比如说filter,会产生新的流。
    流是元素的序列。与集合不同,它不是存储元素的数据结构。相反,流通过管道从源传递值。此示例通过调用方法流从集合名册中创建流。filter操作返回包含匹配其谓词的元素的新流(该操作的参数)。在本例中,谓词是lambda表达式e->e.getGender() == Person.Sex.MALE。如果对象e的性别字段是Person.Sex.MALE,则返回布尔值true。因此,在此示例中的filter操作返回包含集合roster中所有男性成员的流。
  • 终结操作
    终结操作(如forEach)产生非流结果,例如原始值(如double)、集合,或者在forEach的情况下,根本没有值。在本例中,forEach操作的参数是lambda表达式e->System.out.println(e.getName()),它调用对象e上的getName方法。(Java运行时和编译器推断对象e的类型是Person)



作者:HRocky
链接:https://www.jianshu.com/p/6581bd7c35dd
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值