>  기사  >  Java  >  Java의 스트림 및 람다: 예제가 포함된 함수형 프로그래밍 가이드

Java의 스트림 및 람다: 예제가 포함된 함수형 프로그래밍 가이드

王林
王林원래의
2024-08-16 10:31:35495검색

Streams and Lambdas in Java: A Guide to Functional Programming with Examples

함수형 프로그래밍은 현대 소프트웨어 개발에서 널리 사용되는 접근 방식입니다. 객체지향 프로그래밍과 함수형 프로그래밍을 모두 지원하는 언어인 Java는 8번째 버전에서 스트림과 람다를 도입했습니다. 이러한 기능을 통해 개발자는 컬렉션에 기능적 스타일을 적용하여 컬렉션 작업을 더욱 효율적이고 깔끔하게 만들 수 있습니다.

Java 스트림
Java의 스트림은 컬렉션을 요소의 흐름으로 바꿉니다. 이를 통해 개발자는 컬렉션에 대해 매핑, 필터링, 축소 등의 기능적 작업을 수행할 수 있습니다. 스트림은 데이터 변환, 집계 또는 필터링과 관련된 작업에 가장 적합합니다.

스트림 사용의 예는 이름 목록을 알파벳순으로 정렬하는 것입니다. 이름 목록을 만든 다음 스트림을 사용하여 아래와 같이 정렬할 수 있습니다.

목록 names = Arrays.asList("John", "Mary", "David", "Emily", "Tom");
names.stream().sorted().forEach(System.out::println); //출력: David, Emily, John, Mary, Tom

여기서는 목록의 stream() 메서드를 사용하여 스트림을 생성했습니다. 그런 다음 sorted() 메서드를 적용하여 스트림의 요소를 자연 순서로 정렬했습니다. 마지막으로 forEach() 메서드를 사용하여 스트림의 각 요소를 인쇄합니다.

Java의 람다
람다는 Java에서 일류 함수를 정의하는 데 사용됩니다. 이러한 함수는 스트림의 요소를 사용하고 해당 요소에 대한 작업을 수행할 수 있습니다. 람다는 클래스 외부에서 정의되며 함수에 인수로 전달될 수 있습니다.

스트림에 람다를 사용하려면 기능적 인터페이스의 개념을 이해해야 합니다. 이는 추상 메서드가 하나만 있는 인터페이스입니다. 람다 표현식은 기능적 인터페이스의 추상 메소드에 대한 구체적인 구현을 제공하는 데 사용될 수 있습니다.

람다를 사용하여 이름 목록 정렬
위의 예를 바탕으로 람다를 사용하여 이름을 내림차순으로 정렬해 보겠습니다.

목록 names = Arrays.asList("John", "Mary", "David", "Emily", "Tom");
names.stream().sorted((a, b) -> b.compareTo(a)).forEach(System.out::println)); //출력: Tom, Mary, John, Emily, David

여기서는 sorted() 메서드에 대한 인수로 람다 식을 사용했습니다. 이 람다 함수는 두 개의 인수(a 및 b)를 허용하고 이를 비교하여 비교 결과에 따라 양수, 음수 또는 0 값을 반환합니다. 이를 통해 요소에 대한 CompareTo() 메서드를 사용하여 요소를 내림차순으로 정렬할 수 있습니다.

스트림을 다시 컬렉션으로 전환
어떤 경우에는 스트림에 작업을 수행한 후 스트림을 다시 컬렉션으로 바꾸고 싶을 수도 있습니다. Collector 객체를 인수로 받는 Collect() 메서드를 사용하여 이 작업을 수행할 수 있습니다.

목록 filteredNames = names.stream()
.filter(name -> name.length() > 4) //길이가 >인 이름만 유지합니다. 4
.collect(Collectors.toList()); //필터링된 이름 목록 반환

Collect() 메소드는 Collector 유형의 기능적 인터페이스를 사용하여 요소를 컬렉션에 축적합니다. 위의 예에서는 Collectors 클래스의 toList() 메서드를 사용하여 필터링된 이름 목록을 생성했습니다.

스트림의 기타 작업
정렬 및 필터링 외에도 매핑, 축소, 반복 등 스트림에서 수행할 수 있는 다른 작업이 있습니다. 이러한 작업을 통해 스트림의 요소를 각각 변환, 축소 및 반복할 수 있습니다.

숫자 흐름 매핑 및 축소
숫자 목록이 있고 모든 짝수의 합을 구하고 싶다고 가정해 보겠습니다. map() 및 Reduce() 메소드를 사용하여 이를 수행할 수 있습니다.

목록 숫자 = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int sum = 숫자.스트림()
.filter(num -> num % 2 == 0) //홀수 필터링
.map(num -> num * 2) //짝수의 두 배
.reduce(0, (a, b) -> a + b); //모든 숫자를 함께 더하세요

여기서는 map() 메서드를 사용하여 스트림의 짝수를 두 배로 늘린 다음, Reduce() 메서드를 사용하여 모든 숫자를 더했습니다. 결과는 목록에 있는 모든 짝수의 합입니다.

스트림에서 작업 재사용
어떤 경우에는 여러 스트림에서 동일한 기능 작업을 사용해야 할 수도 있습니다. 동일한 코드를 반복해서 작성하는 것을 피하기 위해 기능적 인터페이스를 생성하고 이를 메소드에 인수로 전달할 수 있습니다.

이름 목록을 성순으로 정렬하는 예를 들어보겠습니다. Comparator 인터페이스를 구현하는 비교기 클래스를 생성하고 이를 sorted() 메서드에 인수로 전달할 수 있습니다.

정적 클래스 LastNameComparator는 Comparator을 구현합니다. {
@오버라이드
public int Compare(문자열 이름1, 문자열 이름2) {
String[] parts1 = name1.split(" ");
문자열 lastName1 = parts1[parts1.length - 1];
String[] parts2 = name2.split(" ");
문자열 lastName2 = parts2[parts2.length - 1];
return lastName2.compareTo(lastName1);
}
}

names.stream().sorted(new LastNameComparator()).forEach(System.out::println); //출력: Emily, David, John, Mary, Tom

여기서는 성순으로 이름을 정렬하기 위해 LastNameComparator를 sorted() 메서드에 인수로 전달했습니다.

결론
Java의 스트림과 람다는 컬렉션에 대한 기능적 작업을 수행하는 강력하고 효율적인 방법을 제공합니다. 이를 통해 개발자는 깔끔하고 간결하며 재사용 가능한 코드를 작성할 수 있습니다. 스트림과 람다의 개념을 이해함으로써 전반적인 코딩 기술을 향상하고 보다 효율적인 코드를 작성할 수 있습니다.

Java 기술을 향상시키는 효과적인 방법 중 하나는 최신 Java 인증을 획득하고 MyExamCloud에서 제공되는 1Z0-830 연습 시험을 사용하는 것입니다.

위 내용은 Java의 스트림 및 람다: 예제가 포함된 함수형 프로그래밍 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.