Lambda 표현 식 및 그 응용 장면
4368 단어 Java
Lambda 표현 식 은 함수 식 인터페이스(Functional Interface)의 형 삼 이나 변수 에 값 을 부여 하 는 데 사 용 됩 니 다.
함수 식 인 터 페 이 스 는 하나의 추상 적 인 방법 만 있 지만 여러 개의 추상 적 이지 않 은 방법 을 가 진 인터페이스 이다.
함수 식 인터페이스의 분류
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.