[Basic Java] Stream
스트림이란?
스트림에 대해서 알고 있다고 생각했지만 사실 알고 있다고 착각한거 였음 그래서 다시 정리…
- 배열, 컬렉션 등의 데이터를 하나씩 참조하여 처리 가능한 기능
- for 문의 사용을 줄여 코드를 간결하게 함
- 스트림은 크게 3가지로 구성
- Stream 생성
- 중개연산
- 최종연산
데이터소스객체.Stream생성().중개연산().최종연산();
스트림 생성
배열 스트림
String[]arr = new String[]{"a","b","c"};
Stream stream = Arrays.stream(arr);
컬렉션 스트림
ArrayList list = new ArrayList(Arrays.asList(1,2,3));
Stream stream = list.stream();
스트림 중개연산
- Filtering
- filter 내부 조건에 참인 요소들을 추출
IntStream intStream = IntStream.range(1,10).filter(n->n%2 == 0);
- Mapping
- map 안의 연산을 요소별로 수행
IntStream intStream = IntStream.range(1,10).map(n->n+1);
스트림 최종연산
- Sum, Average
IntStream.range(1,5).sum()
IntStream.range(1,5).average().getAsDouble()
- min, max
IntStream.range(1,5).min().getAsInt();
IntStream.range(1,5).max().getAsInt();
스트림 예제
import java.util.stream.IntStream;
class Solution {
public int[] solution(int n) {
return IntStream.rangeClosed(0, n).filter(value -> value % 2 == 1).toArray();
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.OptionalInt;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
// 1. 스트림 생성
// 1-1. 배열 스트림
System.out.println("== 배열 스트림 == ");
String[] arr = new String[]{"a", "b", "c"};
System.out.println("== fori ==");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("== forEach ==");
for (String item: arr) {
System.out.println(item);
}
System.out.println("== Stream ==");
Stream stream1 = Arrays.stream(arr);
stream1.forEach(System.out::println);
// 1-2. 컬렉션 스트림
System.out.println("== 컬렉션 스트림 ==");
ArrayList list1 = new ArrayList(Arrays.asList(1, 2, 3));
System.out.println("list1 = " + list1);
Stream stream2 = list1.stream();
stream2.forEach(System.out::println);
// stream2.forEach(num -> System.out.println("num = " + num));
// 1-3. 스트림 builder System.out.println("== 스트림 builder ==");
Stream streamBuild = Stream.builder().add("a").add("b").add("c").build();
streamBuild.forEach(System.out::println);
// 1-4. 스트림 generate System.out.println("== 스트림 generate ==");
Stream streamGenerate = Stream.generate( () -> "abc" ).limit(3);
streamGenerate.forEach(System.out::println);
// 1-5. 스트림 iterate System.out.println("== 스트림 iterate ==");
Stream streamIterate = Stream.iterate(10, n -> n * 2).limit(3);
streamIterate.forEach(System.out::println);
// 1-6. 기본 타입 스트림
System.out.println("== 기본타입 스트림 ==");
IntStream intStream = IntStream.range(1, 5);
intStream.forEach(System.out::println);
// 2. 스트림 중개 연산
// 2-1. Filtering
System.out.println("== Filtering ==");
IntStream intStream2 = IntStream.range(1, 10).filter(n -> n % 2 == 0);
intStream2.forEach(System.out::println);
// 2-2. Mapping
System.out.println("== Mapping ==");
IntStream intStream3 = IntStream.range(1, 10).map(n -> n + 1);
intStream3.forEach(n -> System.out.print(n + " "));
System.out.println();
// 2-3. Sorting
System.out.println("== Sorting ==");
IntStream intStream4 = IntStream.builder().add(5).add(1).add(3).add(4).add(2).build();
IntStream intStreamSort = intStream4.sorted();
intStreamSort.forEach(System.out::println);
// 3. 최종 연산
// 3-1. Sum, Average
System.out.println("== sum, average ==");
int sum = IntStream.range(1, 5).sum();
double average = IntStream.range(1, 5).average().getAsDouble();
System.out.println(sum);
System.out.println(average);
// 3-2. Min, Max
System.out.println("== min, max ==");
int min = IntStream.range(1, 5).min().getAsInt();
int max = IntStream.range(1, 5).max().getAsInt();
System.out.println(min);
System.out.println(max);
// 3-3. reduce
System.out.println("== reduce ==");
Stream<Integer> stream3 = new ArrayList(Arrays.asList(1, 2, 3, 4, 5)).stream();
System.out.println(stream3.reduce((x, y) -> x + y).get());
// 3-4. forEach
System.out.println("== forEach == ");
IntStream.range(1, 10).filter(n -> n == 5).forEach(System.out::println);
}
}
댓글남기기