Lambda 표현 식 및 그 응용 장면

4368 단어 Java
Lanmda 표현 식
Lambda 표현 식 은 함수 식 인터페이스(Functional Interface)의 형 삼 이나 변수 에 값 을 부여 하 는 데 사 용 됩 니 다.
함수 식 인 터 페 이 스 는 하나의 추상 적 인 방법 만 있 지만 여러 개의 추상 적 이지 않 은 방법 을 가 진 인터페이스 이다.
함수 식 인터페이스의 분류
  • 소비 형 인터페이스(Consumer)특징:되 돌아 오 는 값 이 있 는 지 없 는 지
  • 공급 형 인터페이스(Supplier)특징:되 돌아 오 는 값 이 없습니다
  •  판단 형 인터페이스(Predicate)특징:반환 값 유형 은 불 유형 입 니 다
  •  기능 형 인터페이스(Function) 특징:반환 값 이 있 습 니 다
  •    
    import java.util.ArrayList;
    import java.util.function.Predicate;
    import java.util.stream.Stream;
    
    public class TestLambda {
    	public static void main(String[] args) {
    		1、     
    		//consumer : void accept
    		//  java.lang.Collection      java8          :
    		//	default void forEach(consumer super T> action)
    		ArrayList a = new ArrayList<>();
    		a.add(1);a.add(2);a.add(3);a.add(4);a.add(5);
    		a.forEach((t)->System.out.print(t));
    		//     :12345
    		//       :
    		//BiConSumer void accept(T t,U u)	   
    		//DoubleConSumer void accept(double value)	double
    		//IntConSumer void accept(int value)	Int
    		//LongConSumer void accept(Long value)	Long
    		//ObjDoubleConSumer void accept(T t,double value)
    		//ObjIntConSumer void accept(T t,int value)
    		//ObjLongConSumer void accept(T t,long value)
    		
    		2、     
    		//Supplier : T get()
    		//    :
    		//BooleanSupplier boolean getAsBoolean()
    		//DoubleSupplier double getAsDouble()
    		//IntSupplier int getAsInt()
    		//LongSupplier long getAsLong()
    		//Stream 
    		//Stream stream = Stream.generate(()->Math.random());
    		//stream.forEach((t)->System.out.println(t));
    		
    		3、     
    		//Predicate boolean test(T t)
    		//eg:java.util.Collection
    		//default boolean removeIf(Predicate super E> filter)
    		a.removeIf(t->t%3==0);
    		a.forEach((t)->System.out.print(t));
    		//     245
    		//    :
    		//BiPredicate boolean test(T t,U u)
    		//DoublePredicate boolean test(double value)
    		//IntPredicate boolean test(double value)
    		//DoublePredicate boolean test(double value)
    		//LongPredicate boolean test(long value)
    		
    		4、            
    		//Function R apply(T t)
    		//    :
    		//IntFunction R apply(Int value)
    		//ToIntFunction int apply(T value)
    		//LongToIntFunction int apply(long value)
    		//IntUnaryOperator int applyAsInt(int operand)
    		
    		
    		
    		
    	}
    	
    }

    Lambd 표현 식 의 문법
    lambda 표현 식 의 문법:
                   (형 삼 목록)->{Lambda 체}       반환 값 이 void 가 아니라면 lambda 표현 식 에 return 문장 이 있어 야 하지만 한 문장 만 있 고 return 문장 일 때 return 문장 을 생략 할 수 있 습 니 다.       예 를 들다        1、list.forEach((t)->System.out.print(t));         2、list.removeIf(t->t%3==0);         3、TreeSet set = new TreeSet<> ((o1,o2)>Double.cpmpare(o1.getScore(),o2.getScore());         3 중 성적 이 같 으 면 이름 순 으로 정렬 하면 다음 과 같이 쓸 수 있 습 니 다.        ((o1,01)->o1.getScore()==o2.getSocre()?o1.getName()-o2.getName():                    o1.getScore( )-o2.getScore())  
    
    import java.util.ArrayList;
    import java.util.function.Predicate;
    import java.util.stream.Stream;
    
    
    public class TestLambda {
    	public static void main(String[] args) {
    
    		A aa = new A();
    		ArrayList query = aa.query(t->t.equals("afei1"));
    		query.forEach(t->System.out.println(t));
    		
    		
    	}
    	
    }
    class A{
    	private ArrayList a;
    
    	public A() {
    		super();
    		this.a = a;
    		a= new ArrayList<>();
    		a.add("afei1");
    		a.add("afei2");
    	}
    	public ArrayList query(Predicate p){
    		ArrayList res = new ArrayList<>();
    		
    		for(String sub:a) {
    			if(p.test(sub)) {
    				res.add(sub);
    			}
    		}
    		return res;
    	}
    	
    }
    
    

    Lambda 표현 식 역할
    lambda 표현 식 은 내부 익명 류 에 비해 코드 의 여분 을 줄 일 수 있 습 니 다.
      SAM  :
    SAM:Single Abstract Method
       java.lang.Runnable:public void run()
      √java.lang.Comparable:public int compareTo(T t)
      √java.lang.util.Comparator:public int Compare(T t1,T t2)
       java.lang.Iterable:public Iterable iterator();
       java.lang.InvocationHandler:public Object invoke(Object proxy,Method method,Object[])
      √java,io.FileFilter:public boolean accept(File pathnName)
         ,            ,       :@Functional Interface 【     】
                ,             ,      ,      lambda   

    좋은 웹페이지 즐겨찾기