가자미의 개발이야기
자바 스트림의 기초 본문
스트림이란 데이터를 일렬로 정렬한 상태를 의미한다.
이렇게 정렬된 데이터를 파이프에 통과시켜 우리가 원하는 결과를 얻고자 할 때 쓰인다.
이때 파이프는 중간연산과 최종연산으로 나뉘는데,
최종연산은 마지막에 오는 파이프로, 다른 것과 순서가 바뀔 수 없고,
중간연산은 최종연산을 제외한 모든 파이프를 의미한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import java.util.Arrays;
import java.util.stream.IntStream;
public class StreamPtc {
public static void main(String[] args) {
int[] ar = {1,2,3,4,5};
//학습용 코드(실효성 x)
IntStream stm1 = Arrays.stream(ar);
IntStream stm2 = stm1.filter(n->n%2==1);
int sum= stm2.sum();
System.out.println(sum);
//실제 사용되는 예시코드
int sum2 = Arrays.stream(ar).filter(n->n%2==1).sum();
System.out.println(sum2);
}
}
|
c |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import java.util.Arrays;
import java.util.stream.IntStream;
public class StreamPtc {
public static void main(String[] args) {
double[] ds = {1.1, 2.2, 3.3, 4.4};
Arrays.stream(ds).forEach(d->System.out.print(d+"\t"));
System.out.println();
Arrays.stream(ds,1,4).forEach(d->System.out.print(d+"\t"));
}
}
|
cs |
-콜렉션 인스턴스에서 스트림 생성하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
public class StreamPtc {
public static void main(String[] args) {
//default Stream<E> stream()
//ava.util.Collection<E>의 디폴트 메소드
List<String> list = Arrays.asList("Toy", "Robot","Box");
list.stream().forEach(s->System.out.print(s+"\t"));
System.out.println();
}
}
|
cs |
-Maping
1
2
3
4
5
6
7
8
9
10
11
|
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
public class StreamPtc {
public static void main(String[] args) {
List<String> list = Arrays.asList("Toy", "Robot","Box");
list.stream().map(s->s.length()).forEach(s->System.out.print(s+"\t"));
System.out.println();
}
}
|
cs |
-이렇게 될 경우 map은 String을 받아 int를 반환해야하지만, int는 제네릭에 사용 될 수 없어서 Integer가 반환된다.
-결국 오토박싱, 오토언박싱이 진행된다.
--이런 상황이 불편하면 mapToInt, mapToDouble, mapToLong을 사용하는 것이 좋다.
-리덕션 : 어떤 조건하에 다수의 데이터를 줄이는 연산. ex) sum();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
import java.util.function.*;
public class StreamPtc {
public static void main(String[] args) {
List<String> list = Arrays.asList("Toy", "Robot","Box");
BinaryOperator<String> lc =(s1,s2)->{
if(s1.length() > s2.length())
return s1;
else
return s2;
};//람다식 만들기
//최종연산 reduce
String str = list.stream().reduce("", lc);
System.out.println(str);
}
}
|
cs |
-병렬 스트림
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
import java.util.function.*;
public class StreamPtc {
public static void main(String[] args) {
List<String> list = Arrays.asList("Toy", "Robot","Box");
BinaryOperator<String> lc =(s1,s2)->{
if(s1.length() > s2.length())
return s1;
else
return s2;
};//람다식 만들기
//최종연산 reduce
String str = list.parallelStream()//병렬 스트림 생성
.reduce("", lc);
System.out.println(str);
}
}
|
cs |
병렬스트림 생성하고 나면 자연스럽게 스트림이 병렬로 진행된다.
'Java > 자바 기본 문법' 카테고리의 다른 글
[자바] 시각과 날짜 관련 코드 (0) | 2021.02.19 |
---|---|
[자바] 스트림 활용 메소드 (0) | 2021.02.17 |
자바 Optional 클래스 (0) | 2021.02.09 |
자바 메소드 참조 (0) | 2021.02.09 |
자바 람다 정의되어 있는 함수형 인터페이스 (0) | 2021.02.04 |