Lambda 표현식을 철저히 깨닫다
1.1 Lambda 표현식
1.1.1 함수식 프로그래밍 사상
대상을 향한 사상: 한 가지 일을 하고 이 일을 해결할 수 있는 대상을 찾아 대상을 호출하는 방법으로 일을 완성한다.
함수식 프로그래밍 사상: 결과를 얻을 수 있다면 누가 하든 어떻게 하든 중요하지 않다. 결과를 중시하고 과정을 중시하지 않는다.
함수식 사상은 대상을 향한 복잡한 문법을 최대한 소홀히 한다. 어떤 형식으로 하는 것이 아니라 무엇을 강조하는 것이다
1.1.2 Lambda 표현식의 도입
전통적인 루틴 실현 방식: 루틴을 시작하려면
Thread
류의 대상을 만들고 start
방법을 호출해야 한다.라인이 실행하는 내용을 지정하기 위해서는 Thread
류의 구조 방법을 호출해야 한다.Runnable
인터페이스의 실현 대상을 얻기 위해 이 인터페이스에 실현 클래스RunnableImpl
를 정의할 수 있습니다.//
public class RunnableImpl implements Runnable {
@Override
public void run() {
System.out.println(" !");
}
}
class RunnableImplTest {
public static void main(String[] args) {
Runnable task = new RunnableImpl();
new Thread(task).start();
}
}
익명 내부 클래스 사용: 이
RunnableImpl
클래스는 Runnable
인터페이스를 실현하기 위해 존재하고 유일하게 사용되기 때문에 익명 내부 클래스의 문법을 사용하면 이 클래스의 단독 정의를 줄일 수 있습니다.public class RunnableImplTest {
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(" !");
}
}).start();
}
}
익명 내부 클래스는 클래스의 정의를 실현하는 데 도움을 줄 수 있지만 문법의 장점은 복잡하다
코드의 의미를 분석하면 알 수 있듯이
Runnable
인터페이스는 하나run
방법의 정의만 있다.public abstract void run();
즉, 일을 하는 방안을 제정했다(사실은 하나의 함수이다).
같은 의미는
Lambda
문법에 나타나므로 더욱 간단해야 한다.() -> System.out.println(" !")
run
방법의 매개 변수(없음)는 어떠한 조건도 필요하지 않다는 것을 의미한다.1.1.3 Lambda 표현식 표준 형식
Lambda는 3가지 섹션으로 구성된 객체 지향 프레임을 생략했습니다.
( ) -> { }
형식 설명:
->
는 새로 도입된 문법 형식으로 지향 동작을 대표한다.1.1.4 Lambda 표현식 사용 사전 요구 사항
Lambda의 문법은 매우 간결하여 대상을 향한 복잡한 속박이 전혀 없다.그러나 사용 시 주의해야 할 몇 가지 문제가 있다.
Runnable
,Comparator
인터페이스든 사용자 정의 인터페이스든 인터페이스에 추상적인 방법이 존재하고 유일한 경우에만 Lambda를 사용할 수 있다.비고: 추상적인 방법이 있는 인터페이스를'함수식 인터페이스'라고 부른다.
1.1.5 Lambda 표현식(반환값 없음)
public class RunnableImplTest {
public static void main(String[] args) {
new Thread(()->{
System.out.println(" !");
}).start();
}
}
1.1.6 Lambda 표현식(반환값 참조)
예: 지정된 정렬 규칙으로 배열 정렬
기존 쓰기 방식:
public class ComparatorSort {
public static void main(String[] args) {
//
Person[] array = {
new Person(" ", 19),
new Person(" ", 18),
new Person(" ", 20) };
//
Comparator<Person> comp = new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge() - o2.getAge();
}
};
Arrays.sort(array, comp); // , Comparator
for (Person person : array) {
System.out.println(person);
}
}
}
Lambda 표현식 사용:
public class ComparatorSortLambda {
public static void main(String[] args) {
Person[] array = {
new Person(" ", 19),
new Person(" ", 18),
new Person(" ", 20) };
Arrays.sort(array, (Person a, Person b) -> {
return a.getAge() - b.getAge();
});
for (Person person : array) {
System.out.println(person);
}
}
}
1.1.7 Lambda 생략 형식
람바다가 강조하는 것은'어떻게 하느냐'가 아니라'어떻게 하느냐'여서 컨텍스트에 따라 추론해 알 수 있는 정보는 모두 생략할 수 있다.
** 생략 규칙: ** Lambda 표준 형식에서 생략 쓰기 규칙은 다음과 같습니다.
항소 사례는 생략 규칙을 사용하여 다음과 같이 쓸 수 있다.
public class LambdaOmit {
public static void main(String[] args) {
Person[] array = {
new Person(" ", 19),
new Person(" ", 18),
new Person(" ", 20) };
Arrays.sort(array, (a, b) -> a.getAge() - b.getAge());
for (Person person : array) {
System.out.println(person);
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WeakHashMap,IdentityHashMap,EnumMap다른 맵 구현 클래스와 달리 WeakHashMap 클래스의 키 대상은 간접적으로 약한 인용의 지시 대상으로 저장되며, 키가 정상적으로 사용되지 않을 때 자동으로 항목을 제거합니다.더 정확히 말하면, 주어진 키에 대한...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.