Stream API
- stream과 다른 개념 (파일 I/O , 소켓 X -> 완전히 다른 개념)
- java 8 버전부터 추가된 유용한 클래스
- 자바에서는 많은 양의 데이터를 저장하기 위해서
배열이나 컬렉션 프레임 워크를 사용한다.
그러면 코드의 길이가 너무 길어지고,
가독성도 떨어지며 코드의 재사용이 거의 불가능하다.
- 반복자 (iterator) -> 스트림 API를 도입했다.
스트림 API를 이용하면 배열이나 컬렉션 등
모두 거의 같은 방법으로 다룰 수 있게 된다.
* 스트림 API의 동작 흐름
- 스트림이라는 클래스가 생성
- 스트림의 중간 연산
- 스트림의 최종 연산
- 한번 생성한 스트림은 재사용이 불가능하다.
(단 한번만 사용이 가능하다)
- 스트림은 원본 데이터를 변경하지 않는다.
- 스트림의 연산은 필터 & 맵 기반의 API를 사용하여
지연 (Lazy) 연산을 통해 성능을 최적화 한다.
public class MainTest1 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9,10};
int sumValue = Arrays.stream(arr).sum(); // 배열 요소의 합
long count = Arrays.stream(arr).count(); // 배열 요소가 몇 개가 있는지
System.out.println(sumValue);
System.out.println(count);
}
}
중간연산
|
|
filter ()
|
map ()
|
조건에 맞는 요소를 추출하고 싶을 때 사용
|
해당하는 요소를 변경하고 싶을 때 사용
|
▼
|
|
마지막 연산 (최종 연산)
|
|
forEach
|
public class MainTest2 {
public static void main(String[] args) {
List<Integer> list = new ArrayList();
for (int i=1; i<8; i++) {
list.add(i);
}
// 스트림 생성
Stream<Integer> myStream = list.stream();
// 중간 연산이 filter나 map
// 마지막 연산이 forEach
myStream.filter(s -> (s >= 5)).forEach(n -> System.out.println(n));
System.out.println(list);
}
}
public class MainTest3 {
public static void main(String[] args) {
List<String> sList = new ArrayList<>();
sList.add("Tomas");
sList.add("Edward");
sList.add("Jack");
Stream<String> stream = sList.stream();
* 어떤 요소가 있나 확인
stream.forEach(s -> System.out.println(s + " "));
System.out.println("------------------------------");
* 정렬하는 기능 (오름차순) --> sorted
sList.stream().sorted().forEach(s -> System.out.println(s+ " "));
System.out.println("------------------------------");
* 데이터를 변형 할 때 사용하는 map
--> 길이로 변경!
sList.stream().map(s -> s.length()).forEach(n -> System.out.println(n));
System.out.println("------------------------------");
* 이름의 길이가 5글자 이상인 경우
sList.stream().filter(s -> s.length() >= 5).forEach(m -> System.out.println(m));
}
}
public class MainTest4 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9,10};
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
int sum2 =list.stream().mapToInt(n -> n.intValue()).sum();
System.out.println(sum2);
}
}
mapToInt : 스트림을 Int스트림으로 변경시켜줌!
'개발일지 > 자바' 카테고리의 다른 글
크롤링해서 이미지 파일 다운받기 (0) | 2023.12.21 |
---|---|
Base64 인코딩, 디코딩 (0) | 2023.12.17 |
Http통신으로 JSON 객체 여러개 가져오기(리스트), 파싱하기 (0) | 2022.10.31 |
Gson(라이브러리), Gson을 java로 변환하는 방법, 얕은복사, 깊은 복사 (0) | 2022.10.31 |
JAVA로 HTTP통신해보기 & Jsonparsign (0) | 2022.10.31 |
댓글