java函数式编程:四大Function

java函数式编程:四大Functionjava util function 包下的四大 Function1 Consumer 消费者 publicinterf T voidaccept Tt 从名字可以看出 消费者是来消费的 它接受一个数据 没有任何返回值 简单使用 比如我们只想打印列表中的每个元素 这里的 forEach Consumer 里面接受的参数就是一个 C T

java.util.function包下的四大Function

函数式编程为jdk1.8新特性,学习好利用好,编程变得更加美好~

1. Consumer 消费者

public interface Consumer<T> { 
    void accept(T t); } 

从名字可以看出,消费者是来消费的,它接受一个数据,没有任何返回值。

简单使用:比如我们只想打印列表中的每个元素,这里的forEach(Consumer)里面接受的参数就是一个Consumer

 List<Object> objects = Arrays.asList("a", "b", "c"); objects.stream().forEach(s -> System.out.println(s)); 

Comsumer家族成员

1. 一次消费两个数据 public interface BiConsumer<T, U> { 
    void accept(T t, U u); } 2. 消费一个Double类型的数据 public interface DoubleConsumer { 
    void accept(double value); } 3. 消费一个int数据 public interface IntConsumer { 
    void accept(int value); } 4. 消费一个Long数据 public interface LongConsumer { 
    void accept(long value); } 5. 消费两个数据,其中一个为Double类型 public interface ObjDoubleConsumer<T> { 
    void accept(T t, double value); } 6. 消费两个数据,其中一个为Int类型 public interface ObjIntConsumer<T> { 
    void accept(T t, int value); } 7. 消费两个数据,其中一个为Long类型 public interface ObjLongConsumer<T> { 
    void accept(T t, long value); } 

2. Function 转换器

public interface Function<T, R> { 
    R apply(T t); } 
List<Object> objects = Arrays.asList("a", "b", "c"); objects.stream().map(t -> { 
   return t + " hello";}).forEach(System.out::println); 

Function家族

1. 接受两个数据,返回一个结果 public interface BiFunction<T, U, R> { 
    R apply(T t, U u); } 2. 接受一个double类型数据,返回一个结果 public interface DoubleFunction<R> { 
    R apply(double value); } 3. 接受一个double类型,返回一个int类型数据 public interface DoubleToIntFunction { 
    int applyAsInt(double value); } 4. 接受一个double,返回一个long类型 public interface DoubleToLongFunction { 
    long applyAsLong(double value); } 5. 接受一个int,返回一个结果 public interface IntFunction<R> { 
    R apply(int value); } 6. 还有IntToDoubleFunction, IntToLongFunction, LongFunction, LongToDoubleFunction, LongToIntFunction, ToDoubleBiFunction, ToDoubleFunction, ToDoubleFunction, ToIntBiFunction, ToIntFunction, ToLongBiFunction, ToLongFunction等,根据名字很容易理解其作用,不一一贴上源码。 

3. Predicate 裁判

public interface Predicate<T> { 
    boolean test(T t); } 
List<Object> objects = Arrays.asList("a", "b", "c"); objects.stream().filter(s -> { 
    return s.equals("a"); }).forEach(System.out::println); 

Predicate家族

1. 接受两个参数,返回true or false public interface BiPredicate<T, U> { 
    boolean test(T t, U u); } 2. 接受一个double,返回true or false public interface DoublePredicate { 
    boolean test(double value); } 3. 接受一个int,返回true or false public interface IntPredicate { 
    boolean test(int value); } 4. 接受一个Long,返回true or false public interface LongPredicate { 
    boolean test(long value); } 

4. Supplier 供应商

public interface Supplier<T> { 
    T get(); } 
Supplier<String> supplier = new Supplier<String>() { 
    @Override public String get() { 
    return "hello world"; } }; String s = supplier.get(); System.out.println(s); 

Supplier家族

1. 返回booleanpublic interface BooleanSupplier { 
    boolean getAsBoolean(); } 2. 返回double public interface DoubleSupplier { 
    double getAsDouble(); } 3. 返回int public interface IntSupplier { 
    int getAsInt(); } 4. 返回long public interface LongSupplier { 
    long getAsLong(); } 

总结:1.8新增的函数式接口在Stream流中有众多应用,后续将继续学习Stream流。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • 微信小程序开发实战1 微信小程序开发概述

    微信小程序开发实战1 微信小程序开发概述1.微信小程序开发概述1.1微信小程序的特点微信小程序是微信平台提供的一种开放技术,微信小程序为企业用户服务,用于建立一种移动端的“轻应用”,这种应用是不需要下载安装即可使用的应用,用户扫一扫或者搜一下即可打开应用。用户也不用关心是否安装了太多应用的而造成手机空间不足问题。微信小程序的推出后,与订阅号、服务号、企业号并列成为微信的企业应用体系。图1-1微信公众平台产品类型微信小程序运行在微信平台之上,微信平台对不同的手机平台已经做了兼容。使用微信小程序开发的应用,不需要兼容多个平台,开发完成后可

    2022年7月16日
    34
  • 源码大招:不服来战!撸这些完整项目,你不牛逼都难!

    源码大招:不服来战!撸这些完整项目,你不牛逼都难!经常有人问我有没有什么项目代码,我回复说去Github找,但是还是好多人不知道如何找到那些比较好的项目。今天花了点时间找了些安卓的项目,觉得还是不错的,几乎就是自己生活常用的一些app,如果你是一个Android开发者,我觉得撸完这些项目,你想不牛逼都难。菜鸟新闻菜鸟新闻客户端是一个仿照36Kr官方,实时抓取36Kr官网数据的资讯类新闻客户端。包括首页新闻,详情,发现,活动,实时数据

    2022年6月17日
    27
  • Resnet-18网络图示理解

    Resnet网络简介:resnet-18网络图示:17个卷积层(conv)+1个全连接层(fc)提示:BN就是批量归一化RELU就是激活函数lambdax:x这个函数的意思是输出等于输入identity就是残差1个resnetblock包含2个basicblock1个resnetblock需要添加2个残差在resnetblock之间残差形式是1*1conv,在resne

    2022年4月3日
    281
  • Mycat读写分离的简单实现「建议收藏」

    Mycat读写分离的简单实现「建议收藏」文章目录1、Mycat读写分离的配置1.1、Mycat是什么1.2、Mycat能干什么1.2.1、数据库的读写分离1.2.2、数据库读写分离图解1.2.3、数据库分库分表1.2.3.1、水平拆分(分库)1.2.3.2、垂直拆分(分表)1.3、Mycat的搭建1.3.1、前期准备1.3.2、搭建环境1.3.3、Mycat的安装启动关闭1.3.4、Mycat的配置文件1.3.5、server.xml文件的配置1.3.6、schema.xml文件的配置1.4、测试读写分离1、Mycat读写分离的配置1.1、M

    2022年10月13日
    2
  • initramfs学习「建议收藏」

    initramfs学习「建议收藏」(一)helloworld一、initramfs是什么在2.6版本的linux内核中,都包含一个压缩过的cpio格式的打包文件。当内核启动时,会从这个打包文件中导出文件到内核的rootfs文件系统,然后内核检查rootfs中是否包含有init文件,如果有则执行它,作为PID为1的第一个进程。这个init进程负责启动系统后续的工作,包括定位、挂载“真正的”根文件系统设备(如果有的话)。

    2022年8月11日
    14
  • 【机器学习】详解 转置卷积 (Transpose Convolution)「建议收藏」

    【机器学习】详解 转置卷积 (Transpose Convolution)「建议收藏」【机器学习】详解转置卷积(TransposeConvolution)

    2022年6月21日
    28

发表回复

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

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