Java8新特性(一)------函数式编程

原创 2016年05月30日 15:50:30

 Ø  基本概念

  理解FunctionalInterface(函数式接口,以下简称FI)是学习Java8 Lambda表达式的关键所在。FI的定义其实很简单:任何接口,如果只包含唯一 一个抽象方法,那么它就是一个FI。为了让编译器帮助我们确保一个接口满足FI的要求(也就是说有且仅有一个抽象方法),Java8提供了@FunctionalInterface注解。

  对于方法的引用,严格来讲都是需要定义一个接口,可是不管如何进行操作,实际上有可能里面提供了一个包:     java.util.function,主要提供以下四种核心接口:

  1.      功能性接口(function): public interface Function<T,R>{public R apply(T t);}

     ------此接口接收一个参数,返回一个处理结果

  2.      消费性接口(consumer): public interface Consumer<T>{public void accept(T t);}

     ------此接口只是接收数据,不返回处理结果

  3.  供给性接口(Supplier):publicinterface Supplier<T>{public T get();}

     ------此接口不接受参数,但是返回处理结果

  4.  断言性接口(Predicate):publicinterface Predicate<T>{public boolean test(T t);}

     ------此接口用于进行判断操作使用

 Ø  实战

  具体的使用示例:

  功能性接口

  接口参数并且返回处理结果

 /**
         * 功能性接口
         */
        Function<String,Boolean> fun="##hello"::startsWith;   //表示方法中的参数
        System.out.println(fun.apply("##"));

  消费性接口

  接口只是接口参数,并不返回处理结果

   /**
         * 消费性接口
         */
        Consumer<String> cons=System.out :: println;
        cons.accept("Hello World");

  供给性接口

 /**
         * 供给型接口
         */
        Supplier<String> sup="hello"::toUpperCase;
        System.out.println(sup.get());

  断言性接口

        /**
         * 断言性接口
         */
        Predicate<String> pre="hello"::equalsIgnoreCase;
        System.out.println(pre.test("Hello"));

  上面的采用的是函数式接口进行实现的,如果你想把接受一些输入参数并将对输入参数处理过后的结果返回的功能封装到一个方法内,Function接口是一个不错的选择。输入的参数类型和输出的结果类型可以一致或者不一致。具体结果可以试试输出结果看看。

  以上四种接口的实现采用的都是方法引用(Method References),也就是一个简单的方法调用而已,也是lambda表达式的一种简化写法。理解了这些再来理解下面说的lambda表达式的话,可能会更加好理解性。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java8 Consumer接口源码阅读

/** * 代表一个操作,这个操作接受单一输入参数并且不返回任何结果。不像其它大多数函数接口,Consumer被 * 期望通过副作用操作。(通过副作用操作时什么意思?) * *这是一个函数接口...
  • l294265421
  • l294265421
  • 2015年04月19日 19:33
  • 2506

java8函数式编程中文版

  • 2016年06月14日 19:44
  • 11.73MB
  • 下载

java8函数式编程之三:集合中新增的方法:forEach

java 1.5的时候增加foreach的增强for循环,然而这里的forEach并不是那个foreach,该处谈论的foreach是集合类的父接口iterable中在jdk1.8新增加的foreac...
  • englishsname
  • englishsname
  • 2017年01月07日 17:01
  • 2003

JAVA8新特性 函数式编程Lambda

函数式编程:以处理数据的方式处理代码,这意味着函数可以被赋值给变量,传递给函数等,函数应该是第一等级的值。 纯函数:对于给定的输入总会返回相同的输出,并且不会产生影响或者改变任何的程序状态 http:...
  • crazywaster
  • crazywaster
  • 2016年08月30日 13:17
  • 2322

Java8 Lambda表达式 函数式编程

什么是λ表达式 λ表达式本质上是一个匿名方法。让我们来看下面这个例子:public int add(int x, int y) { return x + y; } 转成λ表达式后是这个样子:(...
  • hnulwt
  • hnulwt
  • 2015年03月17日 10:41
  • 4145

《java8函数式编程》——使用函数式编程重构代码

遗留代码:找出长度大于1分钟的歌曲 public Set findLongTracks(List albums){ Set tracksNames=new HashSet(); for...
  • qq_20278449
  • qq_20278449
  • 2015年10月30日 16:10
  • 858

Java 8函数式编程.pdf

  • 2016年06月23日 15:17
  • 11.73MB
  • 下载

关于Java8函数式编程你需要了解的几点

函数式编程与面向对象的设计方法在思路和手段上都各有千秋,在这里,我将简要介绍一下函数式编程与面向对象相比的一些特点和差异。...
  • xinaij
  • xinaij
  • 2016年03月31日 22:52
  • 1039

java 8 部分新特性和函数式编程

1.接口可以添加非抽象的方法,使用关键字 default 即可 代码如下:public interface Ijava8 { void getName(String name); de...
  • u012373815
  • u012373815
  • 2016年09月11日 13:17
  • 1044

谈一谈Java8的函数式编程(二) –Java8中的流(转)

谈一谈Java8的函数式编程(二) –Java8中的流 流与集合    众所周知,日常开发与操作中涉及到集合的操作相当频繁...
  • chengwangbaiko
  • chengwangbaiko
  • 2017年06月18日 16:27
  • 292
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java8新特性(一)------函数式编程
举报原因:
原因补充:

(最多只允许输入30个字)