zoukankan      html  css  js  c++  java
  • [译]Java8的函数式接口

    Java8引入了 java.util.function 包,他包含了函数式接口,具体的描述在以下api说明文档中:

    函数式接口为lambda表达式和方法引用提供目标类型。每个函数式接口有一个单独的抽象方法,被称为函数式接口的函数方法,lambda表达式的参数和返回类型与之匹配或适应。

    在这篇文章中,将着重介绍function包40个接口中的4个:

    Predicate<T>

    代表有一个参数的断言(boolean值的函数)

    Predicate 接口允许我们创建一个基于给定参数并返回一个boolean值的lambda表达式。让我们创建一个Predicate来测试一个Person是否为成年人。

    Predicate<Integer> isAnAdult = age -> age >= 18;

    这里对于stream的filter方法的使用,让Predicate接口作为一个参数。所以我们实际上能够在stream中使用我们的Predicate接口。

    Predicate<Person> isAnAdult = person -> person.getAge() >= 18;
    List<Person> people = getAllPeople();
    Integer numOfAdult = people.stream().filter(isAnAdult).count();

    Consumer<T>

    代表一个接受单个参数输入而不返回任何结果的操作。不像大多数其他的函数式接口,Customer预期是通过副作用进行操作。
    Consumer<Ticket> ticketPrinter = ticket -> ticket.print();

    Iterable接口带来的全新forEach方法可以将Consumer作为一个参数,让我们用forEach方法将上面创建的ticketPrinter操作组合在一个Collection上:

    Consumer<Ticket> ticketPrinter = ticket -> ticket.print();
    
    Collection<Ticket> tickets = getTicketsToPrint();
    tickets.forEach(ticketPrinter);

    现在,让我们简化一下代码,通过把Consumer直接放进forEach方法中:

    Collection<Ticket> tickets = getTicketsToPrint();
    tickets.forEach(ticket -> ticket.print());

    Supplier<T>

    表示结果供应

    这是工厂的一种,他没有参数,只是返回给你一个结果。非常适合返回一个实例。

    Supplier<TicketHandler> ticketHandlerCreator = () -> new TicketHandler();

    另一种方案是使用构造方法引用。

    Supplier<TicketHandler> ticketCreator = TicketHandler::new;

    Function<T,R>

    表示一个方法接收一个参数然后产出一个结果

    让我们直接看一个例子:

    Function<String,Predicate<Ticket>> ticketFor = event -> ticket -> event.equals(ticket.getName());
    List<Ticket> tickets = getAllTickets();
    Integer soldTicketsForCoolEvent = tickets.stream().filter(ticketFor.apply("CoolEvent")).count();

    我们创建了一个以event字符串作为参数的Function,他会返回一个Predicate。参数会被传给Predicate,并与event字符串作比较。然后我们在stream中使用function去计算ticket name为"CoolEvent"的数量

    *英文链接:deadCodeRising

    *原创译文

  • 相关阅读:
    如果让你手写个栈和队列,你还会写吗?【华为云技术分享】
    挑战10个最难的Java面试题(附答案)【上】【华为云技术分享】
    k 近邻算法解决字体反爬手段|效果非常好
    实战!轻松搭建图像分类 AI 服务
    100 个网络基础知识普及,看完成半个网络高手【华为云技术分享】
    周杰伦新歌《说好不哭》上线,程序员哭了......【华为云技术分享】
    云图说|华为云数据库在线迁移大揭秘
    #化鲲为鹏,我有话说# 鲲鹏弹性云服务器配置 Tomcat
    地面光伏电站项目前期申报审批流程及开发建设流程一览!
    HTTP 1.0 Status Code Definitions
  • 原文地址:https://www.cnblogs.com/wanshiming/p/9509010.html
Copyright © 2011-2022 走看看