비디오: [자바 중급] 람다식 기본문법 2024
자바는 스트림과 람다 표현을 최적으로 사용하는 멋진 메소드를 가지고있다. 스트림 및 람다 식을 사용하면 조립 라인을 생성 할 수 있습니다. 조립 라인 솔루션은 기능 프로그래밍의 개념을 사용합니다.
조립 라인은 몇 가지 방법으로 구성됩니다. 각 메소드는 데이터를 가져 와서 데이터를 어떤 방식 으로든 변환하고 그 결과를 다음 메소드로 전달합니다. 여기에 조립 라인이 있습니다.
각 상자는 조립 라인을 따라 변형되는 수많은 원자재를 나타냅니다. 각 화살표는 메서드를 나타냅니다 (또는 은유 적으로 어셈블리 라인의 작업자).
예를 들어 두 번째 상자에서 세 번째 상자로 전환 할 때 작업자 메서드 (
filter
메서드)는 DVD가 아닌 항목의 판매를 선별합니다. 루시 리카도가 두 번째 상자와 세 번째 상자 사이에 서서 조립 선에서 각 서적이나 CD를 꺼내 부주의하게 바닥에 던지면 상상해보십시오.
메소드의 파라미터는
Predicate
- 결과가
boolean
인 람다 식입니다.
필터
메서드는 람다 식의
true / false
테스트를 통과하지 못하는 항목을 제거합니다.
일부 함수 프로그래밍 메소드
멤버 | 매개 변수 | 결과 유형 | 결과 값 | 스트림 |
컬렉션
|
(예:
스트림
스트림
컬렉션 |
스트림 |
스트림
|
컬렉션 |
스트림
|
컬렉션
|
요소를 뱉어내는 스트림
|
> 람다 표현식이 반환하는 값을 포함하는 새로운 스트림
|
true
map
|
Stream
|
함수
|
Stream
|
수신 스트림에 람다 표현식을 적용한 결과를 포함하는 새로운 스트림
|
Stream |
Stream
|
BinaryOperator
|
|
BinaryOperator
에 사용되는 형식 수신 스트림의 모든 값을 결합한 결과
|
메서드)는 각
항목 중
가격
판매
. 그 작업자의 위치에서부터 조립 라인은
가격
값만 포함합니다.
Java의
map
메소드는
Function
와 같이
(sale) -> sale을 취합니다. getPrice ()
를 호출하고 스트림의 각 값에
Function
을 적용합니다. 따라서
map
메소드는
sale
객체의 수신 스트림을 가져 와서
price
값의 발신 스트림을 생성합니다.
네 번째 상자에서 다섯 번째 상자로 전환하는 작업자 방법 (
reduce
메서드)은 DVD 판매 가격을 합산합니다.Java의
reduce
메소드는 두 개의 매개 변수를 사용합니다.
첫 번째 매개 변수는 초기 값입니다.
위 이미지에서 초기 값은
0입니다. 0 999이다.
두 번째 매개 변수는
BinaryOperator
입니다.
위 이미지에서
메소드의
BinaryOperator
는
(price1, price2) -> price1 + price2
reduce
메소드
BinaryOperator
를 사용하여 들어오는 스트림의 값을 결합합니다. 초기 값은 모든 결합의 시작점 역할을합니다. 따라서
reduce
메소드는 두 가지 추가 작업을 수행합니다.
reduce 메소드는 들어오는 스트림에서 두 개의 값을 추가합니다. 비교를 위해서 값이
3 인 스트림으로 메소드
reduce (10. 0, (value1, value2) -> value1 * value2)
를 호출하는 것을 상상해보십시오. 0 999, 999. 0 999 및 999이다. 0 999이다. 결과는 다음과 같습니다.
reduce 메소드는 들어오는 스트림의 값을 곱합니다.
map
및
reduce
사이의 유사성은 우연이 아닙니다.
전체적으로 살펴보면 전체 조립품은 판매 된 DVD의 가격을 결정합니다. 위의 코드는 위의 첫 번째 이미지 인 스트림과 람다 식을 사용하는 완전한 프로그램을 포함합니다.
import java. 본문. NumberFormat;
import java. util. ArrayList;
public class TallySales { public static void main (String [] args) { ArrayList
판매 = 새로운 ArrayList <> ();
fillTheList (sales);
총계 = 매출액. stream ()
필터 ((판매) -> 판매.getItem (). equals ("DVD"))
. map ((sale) -> sale. getPrice ())
. reduce (0. 0, (price1, price2) -> price1 + price2);
시스템. 아웃. println (통화. 형식 (총));
}
정적 void fillTheList (ArrayList
판매) {
판매. 추가 (새 판매 ("DVD", 15. 00));
판매. 추가 (새 판매 ("Book", 12. 00));
판매. 추가 (새 판매 ("CD", 5. 25));
}
}
코드에는 Java 8 이상이 필요합니다. IDE가 이전 버전의 Java 용으로 설정된 경우 IDE의 설정을 변경해야 할 수도 있습니다. 새로운 버전의 Java를 다운로드해야 할 수도 있습니다.
굵은 글씨는 하나의 큰 Java 할당 문입니다. 명령문의 오른쪽에는 일련의 메소드 호출이 들어 있습니다. 각 메서드 호출은 개체를 반환하며 이러한 각 개체는 다음 메서드 호출에서 점 앞에 오는 개체입니다. 그것이 조립 라인을 구성하는 방법입니다.
예를 들어, 굵은 체 코드의 시작 부분에서
sales
라는 이름은
ArrayList
ArrayList
객체에는
스트림
메서드가 있습니다. 위 코드에서
판매. stream ()
는
ArrayList
객체의
stream
메서드에 대한 호출입니다.
stream 메소드는 Java
Stream
클래스의 인스턴스를 반환합니다. (놀랍지 만!) 그래서
판매. stream ()
은
Stream
객체를 참조합니다.
모든 DVD 판매.
모든
Stream
객체는
필터
메소드를가집니다. 그래서
판매. 흐름(). filter ((sale) -> sale.getItem (). equals ("DVD"))
는
Stream
객체의
필터
메서드에 대한 호출입니다.
패턴이 계속됩니다.
객체의
map
메소드는 또 다른
Stream
객체 - 가격이 포함 된
Stream
객체를 반환합니다.
각 DVD 판매 가격 책정.
가격의
스트림
에는
두
값 - DVD 가격의 합계를 산출하는
축소
방법을 적용합니다.
모든 DVD 판매의 총 가격 가져 오기.