자바 스트림(Stream) API란?
자바 8부터 추가된 스트림(Stream) API는 데이터 처리를 위한 함수형 프로그래밍을 지원합니다. 스트림은 다양한 데이터 소스에서 처리할 수 있으며, 컬렉션, 배열, I/O 등 다양한 데이터 소스에서 데이터를 가져와 처리하며, 중간 연산과 최종 연산으로 구성됩니다.
중간 연산은 스트림을 반환하며, 최종 연산은 스트림에서 최종 결과를 반환합니다. 이러한 스트림 API를 이용하면 더 간결하고 가독성이 높은 코드를 작성할 수 있습니다. 또한, 스트림 API를 이용하면 코드의 병렬 처리도 가능하므로, 성능을 향상시킬 수 있습니다.
데이터 필터링을 위한 Stream API 활용
데이터 필터링은 스트림 API에서 가장 기본적인 기능 중 하나입니다. 스트림에서 특정 조건에 맞는 데이터만 추출할 수 있습니다. 이를 위해 filter() 메소드를 사용합니다.
filter() 메소드는 Predicate를 매개변수로 받습니다. Predicate는 boolean 값을 반환하는 함수형 인터페이스입니다. Predicate를 이용하여 스트림에서 특정 조건에 맞는 데이터만 추출할 수 있습니다.
List names = Arrays.asList("John", "Jane", "Mike", "Sarah", "Tom");
List filteredNames = names.stream()
.filter(name -> name.startsWith("J"))
.collect(Collectors.toList());
System.out.println(filteredNames); // [John, Jane]
위 예제는 List 객체에서 이름이 "J"로 시작하는 데이터만 추출하는 예제입니다. filter() 메소드를 이용하여 스트림에서 특정 조건에 맞는 데이터만 추출할 수 있습니다.
데이터 변환을 위한 Stream API 활용
데이터 변환은 스트림 API에서 가장 많이 사용되는 기능 중 하나입니다. 스트림에서 처리된 데이터를 다른 형식으로 변환할 수 있습니다. 이를 위해 map() 메소드를 사용합니다.
map() 메소드는 Function을 매개변수로 받습니다. Function은 입력값을 받아서 출력값을 반환하는 함수형 인터페이스입니다. map() 메소드를 이용하여 스트림에서 처리된 데이터를 다른 형식으로 변환할 수 있습니다.
List names = Arrays.asList("John", "Jane", "Mike", "Sarah", "Tom");
List upperCaseNames = names.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(upperCaseNames); // [JOHN, JANE, MIKE, SARAH, TOM]
위 예제는 List 객체에서 이름을 대문자로 변환하는 예제입니다. map() 메소드를 이용하여 스트림에서 처리된 데이터를 다른 형식으로 변환할 수 있습니다.
예제: 자바 스트림(Stream) API를 활용한 데이터 필터링과 변환
다음은 자바 스트림(Stream) API를 활용한 데이터 필터링과 변환 예제입니다. 예제에서는 사용자(User) 클래스를 정의하고, 이를 이용하여 데이터 필터링과 변환을 수행합니다.
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamExample {
public static void main(String[] args) {
List users = Arrays.asList(
new User("John", 30),
new User("Jane", 25),
new User("Mike", 35),
new User("Sarah", 28),
new User("Tom", 40)
);
// 나이가 30 이상인 사용자 필터링
List filteredUsers = users.stream()
.filter(user -> user.getAge() >= 30)
.collect(Collectors.toList());
System.out.println(filteredUsers);
// 이름을 대문자로 변환한 사용자 목록
List upperCaseNames = users.stream()
.map(user -> user.getName().toUpperCase())
.collect(Collectors.toList());
System.out.println(upperCaseNames);
}
static class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + ''' +
", age=" + age +
'}';
}
}
}
위 예제에서는 User 클래스를 정의하고, 이를 이용하여 데이터 필터링과 변환을 수행합니다. User 클래스는 이름(name)과 나이(age)를 가지고 있습니다.
첫 번째 예제에서는 나이가 30 이상인 사용자만 추출하는 예제입니다. filter() 메소드를 이용하여 나이가 30 이상인 사용자만 추출합니다.
두 번째 예제에서는 사용자의 이름을 대문자로 변환하는 예제입니다. map() 메소드를 이용하여 사용자의 이름을 대문자로 변환합니다.
결론
자바 스트림(Stream) API는 데이터 처리를 위한 함수형 프로그래밍을 지원합니다. 스트림 API를 이용하면 더 간결하고 가독성이 높은 코드를 작성할 수 있습니다. 또한, 스트림 API를 이용하면 코드의 병렬 처리도 가능하므로, 성능을 향상시킬 수 있습니다.
스트림 API에서 데이터 필터링과 변환은 가장 기본적인 기능 중 하나입니다. filter() 메소드를 이용하여 스트림에서 특정 조건에 맞는 데이터만 추출할 수 있으며, map() 메소드를 이용하여 스트림에서 처리된 데이터를 다른 형식으로 변환할 수 있습니다.
위 예제를 참고하여 자바 스트림(Stream) API를 활용하여 데이터 처리를 보다 편리하고 간결하게 수행할 수 있습니다.