728x90
반응형
SMALL
Java 8에서 추가한 스트림(Stream)은 람다를 활용할 수 있는 기술 중 하나입니다. 그 이전에는 배열 또는 컬렉션
인스턴스를 다루는 방법은 for 또는 foreach문을 돌며 요소 하나씩 꺼내는 방법이었습니다.
스트림은 배열또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있습니다. 즉, 배열과 컬렉션을 함수형으로 처리할 수 있습니다.
사용법
1. 스트림 생성
List<String> words = Arrays.asList("apple","banana","cherry","date","elderberry");
Stream<String> wordStream = words.stream();
Stream<Integer> numbersStream = Stream.of(1,2,3,4,5);
2. 중간 연산
filter : 특정 조건을 만족하는 요소만 선택합니다.
List<Integer> evenNumbers = numbersStream.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
map : 요소를 다른 형태로 변환합니다.
List<String> upperCaseWords = wordStream.map(String::toUpperCase)
.collect(Collectors.toList());
distinct : 중복 요소를 제거합니다.
List<Integer> distinctNumbers = numbersStream.distinct()
.collect(Collectors.toList());
3. 종단 연산
collect : 스트림 요소를 컬렉션으로 수집합니다.
List<String> filteredWords = wordStream.filter(w -> w.startsWith("b"))
.collect(Collectors.toList());
foreach : 각 요소에 대한 작업을 수행합니다.
numbersStream.forEach(n -> System.out.print(n + " "));
reduce : 요소를 축소하거나 집계합니다.
int sum = numbersStream.reduce(0, (a, b) -> a + b);
4. 병렬 스트림
List<Integer> bigList = new ArrayList<>();
for (int i = 1; i <= 1000; i++) {
bigList.add(i);
}
int sum = bigList.parallelStream() .filter(n -> n % 2 == 0)
.map(n -> n * 2)
.reduce(0, (a, b) -> a + b);
System.out.println("짝수의 합 (병렬): " + sum);
위의 코드에서는 큰 리스트에서 병렬 스트림을 사용하여 짝수를 필터링하고 두 배로 변환한 다음 모두 더합니다. 이렇게 병렬 스트림을 사용하면 멀티코어 프로세서를 활용하여 성능을 향상시킬 수 있습니다.
스트림은 데이터 처리를 간결하게 하고 병렬화를 쉽게 구현할 수 있는 강력한 도구입니다. Java 8의 Stream API를 활용하면 코드를 더 간결하게 작성하고 동시에 성능을 향상시킬 수 있습니다.
728x90
반응형
LIST
'Study' 카테고리의 다른 글
공공데이터포털 사용해보기 feat.호갱고고(아파트 실거래 정보 조회) (1) | 2023.10.11 |
---|---|
[chatGPT]자바(java) 개발 도구와 생태계: 효율적인 자바 개발을 위한 핵심 도구들 (0) | 2023.10.11 |
[ORM] MyBatis vs JPA (0) | 2023.10.10 |
[Spring] DI(Dependency Injection) - 의존성 주입 (0) | 2023.10.09 |
WAS와 WS의 차이 파헤치기 (0) | 2023.10.07 |