java1.8函数式接口

原创 2018年04月17日 09:18:20

一,函数式接口介绍
函数式接口的本质还是一个接口,只不过是一种特殊的接口:SAM(Single Abstarct Method)。义了这种类型的接口,使得以其为参数的方法,可以在调用时,使用一个lambda表达式作为参数。从另一个方面说,一旦我们调用某方法,可以传入lambda表达式作为参数,则这个方法的参数类型,必定是一个函数式的接口,这个类型必定会使用@FunctionalInterface进行修饰。

二,简单例子
自定义的一个简单函数式接口:

@FunctionalInterface
public interface MyPredicate<T> {
    public boolean test(T t);
}

测试我们写的简单函数式接口:

import java.util.Arrays;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Predicate;

public class BiFunctionnalTest {

    public static void main(String[] args){
        List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8);
        System.out.println(getSum(1,2,(a,b)->a+b));
        System.out.println(getSum(1,2,(a,b)->a-b));
        System.out.println(getSum(1,2,(a,b)->a*b));
        System.out.println("=================================");
        //输出所有元素
        eval(list, n->true);
        //输出偶数
        eval(list, n -> n%2 == 0);
        evalMy(list, n->true);
        evalMy(list, n -> n%2 == 0);
        out("come on", n -> System.out.print(n));
    }

    public static void eval(List<Integer> list, Predicate<Integer> pre){
        for(Integer n : list){
            if(pre.test(n)){
                System.out.println(n+"");
            }
        }
        System.out.println("=================================");
    }

    public static Integer getSum(Integer a, Integer b, BiFunction<Integer, Integer, Integer> bi){
        return bi.apply(a, b);
    }

    public static void evalMy(List<Integer> list, MyPredicate<Integer> pre){
        for(Integer n : list){
            if(pre.test(n)){
                System.out.println(n+"");
            }
        }
        System.out.println("=================================");
    }

    public static void out(String input, Consumer<String> test){
        test.accept(input);
    }
}

输出结果:
3
-1

2

1
2
3
4
5
6
7

8

2
4
6

8

1
2
3
4
5
6
7

8

2
4
6

8

come on

这里写代码片

jdk本身也提供了很多常用的函数式接口,基本都在java.util.function包中了。
这里写图片描述

参考:https://www.cnblogs.com/ownraul/p/5551545.html
http://www.runoob.com/java/java8-functional-interfaces.html

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Sukiyou_xixi/article/details/79969755

Java1.8函数式接口

转载自:Java 8 函数式接口函数式接口(Functional Interface)就是一个具有一个方法的普通接口。 函数式接口可以被隐式转换为lambda表达式。 函数式接口可以现有的函数友好...
  • IO_Field
  • IO_Field
  • 2017-03-10 14:33:51
  • 1030

Java8新特性_四大内置核心函数式接口

ConsumnerT 消费型接口 SupplierT 供给型接口 FunctionT R函数式接口 PredicateT断言型接口 其他接口四大内置核心函数式接口: Consumner : 消费型...
  • An1090239782
  • An1090239782
  • 2017-11-20 16:19:11
  • 188

JDK1.8新特性(三)函数式接口

Java8中还提出了一个新名词——函数式接口1(Functional Interface),用来特指某类型的接口。这类接口中定义了唯一的抽象方法,在早期这类接口被叫做SAM类型接口(single ab...
  • sunp_csdn
  • sunp_csdn
  • 2017-02-15 10:10:57
  • 551

java1.8重要新特性

1.接口中可以有默认方法实现 interface A { public void sayString(String str); default public void SayInt(int i)...
  • Senssic
  • Senssic
  • 2014-04-02 12:53:07
  • 4960

Java8的四大核心函数式接口

前言在学习一段时间后会不会有这样的疑问—难道我要用Lambda表达式的时候总要自己写函数式接口吗? 当然不是这样了,Java8里面提供了四大核心的函数式供我们使用!四大核心函数式接口测试代码 ...
  • zjq_1314520
  • zjq_1314520
  • 2017-06-21 22:21:22
  • 2232

Java8新特性Lambda表达式、函数式接口

什么是Lambda表达式,java8为什么使用Lambda表达式? “Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于...
  • l18637220680
  • l18637220680
  • 2017-08-02 11:17:59
  • 793

java8内置函数式接口

简要介绍java8内置函数式接口。
  • neweastsun
  • neweastsun
  • 2016-11-14 22:08:12
  • 1534

java 8 新特性(1.函数式接口 - Functional Interface)

1.函数式接口(Functional Interface): 所谓的函数式接口,当然首先是一个接口,然后就是在这个接口里面只能有一个抽象方法。这种类型的接口也称为SAM接口,即Single Abst...
  • onlyyjco
  • onlyyjco
  • 2016-09-22 11:18:49
  • 6659

认识函数式接口

Java8中还提出了一个新名词——函数式接口(Functional Interface),用来特指某类型的接口。这类接口中定义了唯一的抽象方法,在早期这类接口被叫做SAM类型接口(single abs...
  • dd864140130
  • dd864140130
  • 2016-01-15 02:21:18
  • 2793

Java 1.8 中文API文档

  • 2018年03月27日 20:40
  • 40.65MB
  • 下载
收藏助手
不良信息举报
您举报文章:java1.8函数式接口
举报原因:
原因补充:

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