Java-Lambda式


Java-Lambda式
  • 一、オブジェクト向けプログラミング及び関数式プログラミング
  • 二、Lambda式
  • 三、コード実装


  • 一、オブジェクト向けプログラミング及び関数式プログラミング
    オブジェクト向けプログラミング:各タスクに対して、このタスクを解決できるオブジェクトを見つけ、その中のメソッドを呼び出して問題を解決し、オブジェクトを強調する必要があります.関数式プログラミング:各タスクに対して、タスク解決の結果を強調し、タスク解決の過程に関心を持たず、結果を強調する.
    二、Lambda式
    Lambda式:JDK 1.8出現の新しい特性、コードの書くことを簡略化します.Lambdaの標準フォーマット:複数のパラメータをカンマで区切る
    Lambda式省略規則: 1.カッコ内のパラメータタイプは省略できます. 2.カッコの()にパラメータが1つしかない場合は、カッコを省略することもできます. 3.カッコ{}内にパラメータが1つしかない場合は、戻り値があるかどうかにかかわらずカッコ、returnキーワードである文セミコロンを省略できます(省略を省略するには、単独で省略するとエラーが発生します).
    Lambda使用前提: 1.インタフェースが必要であり、インタフェースに抽象メソッドが1つしかないことが要求されます.すなわち、抽象メソッドが一意であることを保証します. 2.Lambdaを使用するにはコンテキスト推定が必要です.つまり、メソッドのパラメータまたはローカル変数タイプは、Lambdaをインタフェースのインスタンスとして使用するには、Lambdaに対応するインタフェースタイプでなければなりません.
    三、コード実装
    public class LambdaDemo01 {
         
    	public static void main(String[] args) {
         
    		//  Runnable        
    		RunnableDemo demo = new RunnableDemo();
    		//       ,  demo        
    		Thread t = new Thread(demo);
    		t.start();//    :Thread-0    
    		
    		
    		//  Runnable   ,           
    		//             
    		Runnable run = new Runnable(){
         
    			public void run() {
         
    				System.out.println(Thread.currentThread().getName()+"    ");
    			};
    		};
    		
    		new Thread(run).start();    :Thread-1    
    		
    		//       
    		new Thread( new Runnable(){
         
    			public void run() {
         
    				System.out.println(Thread.currentThread().getName()+"    ");
    			};
    		}).start();//    :Thread-2    
    		
    		
    	   //                         ,    ,          
    	   //  run        ,  Lambda             
    	   //1.Lambda         
    		new Thread(()->{
         
    			System.out.println(Thread.currentThread().getName()+"    ");
    		}).start();//    :Thread-3    
    		
    		//    ,        ,      
    		new Thread(()->System.out.println(Thread.currentThread().getName()+"    ")).start();
    		
    		//2.Lambda      ,    ,           
    		Person[] pArray = {
         new Person("   ",18),
    		                   new Person("   ",20),
    		                   new Person("  ",21)};
    		
    //		Arrays.sort(pArray,new Comparator(){
         
    //
    //			@Override
    //			public int compare(Person arg0, Person arg1) {
         
    //				// TODO Auto-generated method stub
    //				return arg0.getAge()-arg1.getAge();
    //			}
    //			
    //		});
    		
    		//  Lambda   
    		Arrays.sort(pArray,(Person p1,Person p2)->{
         
    			return p1.getAge()-p2.getAge();
    		});
    		
    		//    ,        ,   ,return
    		Arrays.sort(pArray,(p1,p2)-> p1.getAge()-p2.getAge());
    		
    		//    
    		for(Person p:pArray){
         
    			System.out.println(p);/*
    			                        Person [name=   , age=18]
                                        Person [name=   , age=20]
                                        Person [name=  , age=21]
    			                      */
    		}
    		
    		
    		
    		//3.Lambda      ,    ,      
    		//        
    //		addDemo add = new addDemo(){
         
    //
    //			@Override
    //			public int add(int a, int b) {
         
    //				// TODO Auto-generated method stub
    //				return a+b;
    //			}
    //		};
    //		System.out.println(add.add(3, 4));//    :7
    		
    		
    		//  Lambda          
    		int result=result(3,5,(int a,int b)->{
         
    			return a+b;
    		});
    	   System.out.println(result);//    :8
    		
    		
    	}
    	public static int result(int a,int b,addDemo add){
         
    		int result=add.add(a, b);
    		return result;
    	}
    	
    
    }
    //  Runnable      ,  run  ,      
    class RunnableDemo implements Runnable{
         
    	@Override
    	public void run() {
         
    		// TODO Auto-generated method stub
    	      System.out.println(Thread.currentThread().getName()+"    ");	
    	}
    }
    
    
    class Person{
         
    	private String name;
    	private int age;
    	public Person() {
         
    		super();
    	}
    	public Person(String name, int age) {
         
    		super();
    		this.name = name;
    		this.age = age;
    	}
    	public String getName() {
         
    		return name;
    	}
    	public void setName(String name) {
         
    		this.name = name;
    	}
    	public int getAge() {
         
    		return age;
    	}
    	public void setAge(int age) {
         
    		this.age = age;
    	}
    	@Override
    	public String toString() {
         
    		return "Person [name=" + name + ", age=" + age + "]";
    	}
    	
    }
    
    
    //      ,       
    interface addDemo{
         
    	public abstract int add(int a,int b);
    }