zoukankan      html  css  js  c++  java
  • java函数式编程基础

    • 函数式编程第一步

    (一)接口实现

    一、 Lambda表达式

    Lambda是一个匿名函数,可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。

    二、Lambda表达式需要“函数式接口”的支持

    只包含一个抽象方法的接口,称为函数式接口。

    你可以通过 Lambda 表达式来创建该接口的对象。(若 Lambda表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法上进行声明)。

    我们可以在任意函数式接口上使用 @FunctionalInterface 注解,这样做可以检查它是否是一个函数式接口,同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口,如果不是,就会报错。

    作为参数传递 Lambda 表达式:为了将 Lambda 表达式作为参数传递,接收 Lambda 表达式的参数类型必须是与该 Lambda 表达式兼容的函数式接口的类型。

    Lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断”

    1.不带参

    
    public class Test1 {
    
    	public static void main(String[] args) {
    		
    		
    //		int x=(int)Math.random()*4;
    //		String string=String.valueOf(x);
    		
    		// TODO 自动生成的方法存根
    		//Foo f=new Fooimp();
    		//f.fun();                             // hello spark
    		
    //		Foo f=new Foo() {                     //匿名内部类
    //											  //new了一个类,匿名类
    //			@Override
    //			public void fun() {
    //				// TODO 自动生成的方法存根
    //				System.out.println("hello super spark 内部类");
    //			}
    //		};
    //		f.fun();
    		
    //		new Thread(() ->System.out.println("hello")).start();
    		
    		Foo foo=()->System.out.println("hello 一个输出。");
    		foo.fun();
    		
    //		Foo f=()->{
    //			System.out.println("hello java8 ");
    //			System.out.println("hello lambda 函数式编程");
    //		};
    //		
    //		f.fun();
    	}
    }
    
    @FunctionalInterface
     interface Foo {
    	void fun();
    }
    // class Fooimp implements Foo {
    //	public void fun(){
    //		System.out.println("hello spark");
    //	}
    //}

    2.带参

    public class Test2 {
    		public static void main(String[] args) {
    			
    			//编译器会将lambda表达式式转换为内部类
    			
    			/*无返回值,带参*/
    			Foo1 foo1=(a,b)->System.out.println("hello spark;"+(a+b));     //lambda表达式可以加类型,也能不加类型,类型推断
    			foo1.show(4,5);
    			
    			/*又返回值,带参*/
    			Foo2 foo2=(int a,int b)->{
    				System.out.println(a+b);
    				return a*b;
    			};
    			System.out.println(foo2.fun(7, 8));
    			
    			Foo2 foo3=(a,b)->a+b;
    			int out=foo3.fun(3, 4);
    			System.out.println(out);
    			
    	}
    }
    
    @FunctionalInterface           //java8新增的注解,报错的时候有提示
    interface Foo1 {
    	void show(int a,int b);
    }
    
    interface Foo2 {
    	int fun(int a,int b);
    }
  • 相关阅读:
    力扣(LeetCode)605. 种花问题
    力扣(LeetCode)463. 岛屿的周长
    力扣(LeetCode)561. 数组拆分 I
    力扣(LeetCode) 263. 丑数
    区块链历史
    力扣(LeetCode) 821. 字符的最短距离
    力扣(LeetCode)804. 唯一摩尔斯密码词
    cmd 查看端口
    nginx windows版 下载和启动
    luogu P1270 “访问”美术馆
  • 原文地址:https://www.cnblogs.com/apppointint/p/8885288.html
Copyright © 2011-2022 走看看