람다 함수에서 소비자는 무엇입니까?
먼저 예제 코드를 생성합니다.
Car car1 = new Car("Porsche 911");
Car car2 = new Car("Ferrari 458");
Car car3 = new Car("Lamborghini Urus");
List<Car> cars = Arrays.asList(car1, car2, car3);
cars.forEach( (c) -> System.out.println(c.getName));
소비자 인터페이스를 설명하기 위해 forEach() 메서드를 사용하겠습니다.
Java 8 이후로 발생하는 이 반복을 구성하는 책임을 유지하는 인터페이스 함수를 수신하는 함수 람다가 있습니다. 함수 람다를 실행하려면 작업을 수행하는 인터페이스 함수가 있어야 합니다.
인터페이스 함수가 있는 경우 Consumer는 Java의 Function 패키지의 일부이며 함수와 함께 사용할 수 있습니다.
좀 더 명확하게 하기 위해 우리는 Consumer 클래스를 구현하는 익명 클래스를 만들 것입니다.
Consumer<Car> show = new Consumer<Car>() {
public void accept(Car c) {
System.out.println(c.getName);
}
}
cars.forEach(show);
Consumer 클래스에는 일부 작업과 함께 사용되지만 아무 것도 반환하지 않는 값을 수신하는 함수를 수신하는 책임을 유지하는 Accept라는 고유한 메서드가 있습니다. 함수를 제시하는 이러한 방식은 관습적이지 않지만, 예를 들어 함수를 생성할 때 어떤 일이 발생하는지 이해하기 위해 함수 람다를 사용할 때 어떤 일이 발생하는지 소개합니다. 이제 이 코드를 리팩토링할 것입니다.
cars.forEach( (c) -> System.out.println(c.getName));
우리는 첫 번째 예에서와 같이 리팩토링에서 볼 수 있습니다. 객체 C를 초기화하는 것이 아니라 컴파일러가 우리가 Consumer를 할당하여 이 정보를 추상화한다는 것을 이해하기 때문에 발생합니다. Accept 메서드가 없는 경우 컴파일 과정에서 유추된 경우 forEach 메서드는 Consumer를 수신하고 각 반복에서 실행할 작업을 보냅니다. 그래서 우리는 Java의 스트림에 의해 기능 인터페이스가 어떻게 작동하는지 간략하게 이해합니다.
Reference
이 문제에 관하여(람다 함수에서 소비자는 무엇입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/wagnernegrao/what-is-the-consumer-in-a-lambda-function-528k텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)