"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Java의 스트림 및 람다: 예제가 포함된 함수형 프로그래밍 가이드

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

2024-08-21에 게시됨
검색:413

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

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

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

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

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

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

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

List 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() 메서드를 사용하여 이 작업을 수행할 수 있습니다.

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

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

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

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

List 숫자 = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int sum = 숫자.stream()
.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 연습 시험을 사용하는 것입니다.

릴리스 선언문 이 기사는 https://dev.to/myexamcloud/streams-and-lambdas-in-java-a-guide-to-functioning-programming-with-examples-4cij?1에서 복제됩니다. 침해가 있는 경우, 문의 Study_golang@163 .comdelete
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3