반응형
Stream을 사용하는 이유
- 아래와 같이 배열이 하나 있는데, 중복값 제거, sort로 정렬, 5의 배수만 출력하는데, 이런 과정이 필요하다.
public class MyMain_TestStream {
public static void main(String[] args) {
int [] arr = {1, 5, 8, 15, 5, 10, 20, 10, 9, 25};
// 1. 중복값을 제거
Set<Integer> set1 = new HashSet<Integer>();
for(int n : arr) {
set1.add(n);
}
System.out.println(set1);
// 2. Set -> Array로 빼냄
Integer [] arr1 = new Integer[set1.size()];
set1.toArray(arr1);
// 3. 정렬
Arrays.sort(arr1);
for(int n : arr1) {
System.out.print(n + " ");
}
System.out.println();
// 4. Array->ArrayList : 5의 배수만 넣기
List<Integer> list = new ArrayList<Integer>();
for(int n : arr1) {
if(n % 5 == 0) {
list.add(n);
}
}
System.out.println(list);
}
}
Stream 사용 경우..(매우매우 간단해진다)
- Stream은 내부연산자로, 아래 코드처럼 호출한것처럼 안에서만 전부 처리된다. next()와는 반대되는결임.
IntStream intStream = Arrays.stream(arr);
// 인트스트림을 가지고 박싱한다.
List<Integer> listFromStream =
intStream.boxed() // int -> Stream<Integer>
.distinct() // 중복제거
.sorted() // 정렬 : Comparator.reverseOrder()(내림차순)
.filter(n -> n % 5 == 0) // 람다식 발동(필터 : 5의 배수만 넣기)
.collect(Collectors.toList()); // 생성 : List
System.out.println(listFromStream);
- Stream은 1회용이다.
// Stream은 1회용
IntStream intStream1 = Arrays.stream(arr);
// count() sum() min() max() average()
System.out.println(intStream1.count());
System.out.println(intStream1.sum()); // 재사용 불가
System.out.println(intStream1.max().orElse(0));; // 재사용 불가, orElse : null 값이면 0출력
- reduce는 데이터를 모아준다.
IntStream intStream2 = Arrays.stream(arr);
String result =
intStream2.boxed()
.distinct()
.sorted()
.filter(n->n%5==0)
.map(n->n+" ") // "5 " "10 " "15 " "20 " "25 "
.reduce("",(a,b) -> b+a); // a 초기값 : "" a = 누적변수이다.
// "25 " + "20 " + "15 " + "10 " + "5 " + ""
System.out.println(result);
// reduce test
IntStream intStream4 = IntStream.range(1, 11); // 1~10까지의 수
int total_result =
intStream4.reduce(0, (total,n)->total+n); // total = total + n
// 0 + 1 + 2 + 3 ..... + 10
System.out.println(total_result); // result = 55
반응형
'java(2)↗' 카테고리의 다른 글
JSP를 활용해서 웹사이트 만들기 (0) | 2024.06.05 |
---|---|
java 알고리즘 보물창고 (0) | 2024.05.29 |
java 2차원배열 및 알고리즘 (0) | 2024.05.14 |
java 요약노트(2) (0) | 2024.05.13 |
VO와 DTO와 DAO (0) | 2024.05.12 |