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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Allure–自动化测试报告生成

    Allure–自动化测试报告生成之前尝试使用过testNG自带的测试报告、优化过reportNG的测试报告,对这两个报告都不能满意。后经查找资料,发现有个神器:Allure(已经有allure2了,笔者使用的就是allure2),

    2022年7月2日
    26
  • 二叉树经典问题——已知中序和前序重建二叉树

    二叉树经典问题——已知中序和前序重建二叉树运用前序和中序序列重建二叉树及其相关应用重建过程1,在二叉树的学习中经常会遇到一类问题,就是给出一棵二叉树的前序和中序序列(后序和中序类似)然后求树的深度、树的后序序列、树的各种遍历等等问题,这个时候如果能根据相关的序列把其代表的二叉树重建出来,那么所有的问题便会迎刃而解。博文的第一部分就给出相关的重建步骤。2,重建中最关键的一点是从前序中找根然后在后序中用相应的根把树‘分解’。举个例子:

    2022年6月11日
    29
  • QLineEdit光标问题

    QLineEdit光标问题QLineEdit 的光标当失去焦点后仍然显示的问题 nbsp nbsp 在 lineedit 和其它按钮之间切换焦点时 注意 lineedit 的设置有顺序 否则当失去焦点时仍有光标闪 或者得到焦点无光标 nbsp nbsp 使 lineedit 有效 lineedit gt setEnabled true lineedit gt setFocus nbsp nbsp nbsp nbsp 使 lineedit 无效 l

    2025年12月4日
    2
  • nhibernate的简单配置与使用

    nhibernate的简单配置与使用配置nhibernate的方式有两种,一种是通过xml文件的方式配置,还有就是通过class的方式配置。网上大多数是以xml的方式配置nhibernate,本文则已class的方式来配置,并通过IOC(依赖注入,本文以构造注入)的方式注册nhibernate。下面就以一个demo来说明配置、注入以及使用的方法。创建一个工程,在工程下添加三个项目。1、Web工程(demo采用的是MVC框架)…

    2022年7月14日
    18
  • 关于2020最新Kali无法使用arpspoof命令解决(在源和包都已经安装的情况下)

    关于2020最新Kali无法使用arpspoof命令解决(在源和包都已经安装的情况下)第一步可以参照这个https://hlynford.com/565.html如果你按照上面的步骤安装了相应的包,还是没有相应的命令,那多半就是路径的问题了第二部[root@server~]#echo$PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin如果输出的东西和上面不一样…

    2022年10月6日
    3
  • string对象下标越界

    string对象下标越界#include<iostream>#include<string>usingnamespacestd;intmain(){stringa;cin>>a[0];cin>>a[1];return0;}最近写代码时发生了这一问题,就是上边的程序,运行后会出现数组越界。其实这是一个非常小的问题,原因是我自己把string当成了一个无穷大的数组,string可以无穷大,但是这并不能将他当成无穷大数组.

    2022年9月26日
    2

发表回复

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

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