首页 未命名正文

linux编程_Java 8函数编程轻松入门

云返利网 未命名 2020-05-26 09:06:48 15 0

Java 8函数编程轻松入门

  • 函数接口先容

  • 在Java1.8中,新增了Lambda表达式。在.net3.5(C# 3.0)在原先的匿名方式基础上演变出了Lambda表达式。学过C# Lambda表达式的同砚,对于Java的Lambda表达式就不会太生疏。
  • 在Java中,没有委托的观点,为了配合Lambda表达式,Java推出了函数接口这个观点,来作为Java Lambda表达式的类型。
  • 1. 函数接口界说:

  • 函数接口是只有一个抽象方式的接口,用作于Lambda表达式的类型
  • 注解:
  • 1.在所界说的接口类上加上@FunctionalInterface注解,主要用于编译错误检查
  • 2.我们所界说的接口,有且只有一种抽象方式(没有方式体的方式)
  • 3.允许界说默认方式(使用default修饰的方式)
  • 4.允许界说静态方式
//界说一个函数接口
@FunctionalInterface
public interface Speak {
    void say(String msg);
}

//未新增Lambda表达式的时刻,实现Speak接口如下
Speak hello = new Speak() {
    @Override public void say(String msg) {
        System.out.println(msg);
    }
};

hello.say("hello world.");//输出hello world.

//新增Lambda表达式之后,实现Speak接口如下,有没有以为代码精简许多
Speak hello = msg -> System.out.println(msg);

hello.say("hello world.");//输出hello world.
  • 2. Lambda表达式的简化历程

  • lambda表达式有类型推断的功效(Java1.7引入的),可以在javac推断出泛型参数的类型。
//lambda表达式版本1
BinaryOperator<Integer> addComplex = (Integer x, Integer y) -> {
            return x - y;
        };
        
//行使类型推断之后的发生版本2,这时刻可以省略参数的类型
BinaryOperator<Integer> addComplex = (x, y) -> {
            return x - y;
};


//若是Lambda表达式Body只有一行代码,可以省略掉大括号({})
BinaryOperator<Integer> addComplex = (x, y) -> x - y;
  • 3. 系统提供的函数接口

  • 在C# 3.0中,有默认提供的Func<...>泛型委托及Action<...>泛型委托。在Java1.8中,同样有类似默认提供的函数接口。其中主要的函数接口如下:
  • 3.1 BinaryOperator
  • 参数: (T,T)
  • 返回类型: T
  • 说明: 二元操作符函数接口
  • 示例:
BinaryOperator<Integer> add = (x, y) -> x + y ;
System.out.println(add.apply(1, 2));//3
  • 3.2 UnaryOperator
  • 参数: T
  • 返回类型: T
  • 说明: 一元操作符函数接口
  • 示例:
UnaryOperator<Boolean> result = x -> !x;
System.out.println(result.apply(1 > 0));//false
  • 3.3 Predicate
  • 参数: T
  • 返回类型: boolean
  • 说明: 条件判断函数接口
  • 示例:
Predicate<Integer> predicate = x -> x > 0;
System.out.println(predicate.test(1));//true
  • 3.4 Consumer
  • 参数: T
  • 返回类型: void
  • 说明: T作为输入,执行某种动作但没有返回值(类似我们上面Speak接口界说的)
  • 示例:
Consumer<String> say = msg -> System.out.println(msg);
say.accept("Hello World Java 1.8");//Hello World Java 1.8
  • 3.5 Function<T,R>
  • 参数: T
  • 返回类型: R
  • 说明: 接受一个T参数,并返回R类型的函数接口
  • 示例:
Function<String, Integer> strLen = m -> m.length();//盘算输入的字符串的长度
System.out.println(strLen.apply("HelloWorld"));//10
  • 3.6 Supplier
  • 参数: None
  • 返回类型: T
  • 说明: 没有任何输入,返回T
  • 示例:
Supplier<String> he=()->"HelloWorld.";
System.out.print(he.get());
  • 4. 总结

  • 1.Lambda表达式是一个匿名方式,将行为像数据一样举行通报
  • 2.函数接口指仅具有单个抽象方式的接口,用来示意Lambda表达式的类型

  • 5. 习题

x -> x + 1;
(x, y) -> x + 1;
x -> x ==1;
  • 2.FirstLambda的两个check是能够准确重载,其中firstLambda.check又是挪用的哪个check方式
@FunctionalInterface
public interface Check {
    boolean IntPred(Integer n);
}

public class FirstLambda {
    public static void main(String[] args) {
        Predicate<Integer> predicate = x -> x > 0;
        FirstLambda firstLambda = new FirstLambda();
        boolean result=firstLambda.check(predicate, 2);
        System.out.println(result);
    }


    public boolean check(Predicate<Integer> predicate, int n) {
        return predicate.test(n);
    }

    public boolean check(Check check, int n) {
        return check.IntPred(n);
    }
}

【关于云返利网】

云返利网是阿里云、腾讯云、华为云产品推广返利平台,在各个品牌云产品官网优惠活动之外,云返利网还提供返利。您可以无门槛获得阿里云、华为云、腾讯云所有产品返利,在官网下单后就可以领取,无论是自己用、公司用还是帮客户采购,您个人都可以获得返利。云返利网的目标是让返利更多、更快、更简单!详情咨询13121395187(微信同号)