728x90

- 스트림은 자료구조 중에서 배열과 컬렉션을 처리할 때 주로 사용하는 클래스입니다.
- 따라서 배열 & 컬렉션 데이터 소스가 필수적으로 필요합니다.

- 중간연산은 js 의 체이닝 기술처럼 반복적으로 사용할 수 있다.

package stream;
import java.util.Arrays;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class Ex1 {
public static void main(String[] args) {
int[] intArr = {1, 5, 3, 2, 4};
IntStream stream1 = Arrays.stream(intArr);
stream1.limit(3).sorted().forEach(n->System.out.println(n));
// intArr 배열을 정렬하고 3개를 뽑아서 출력하는 기능까지
String[] strArr = {"abcde", "abc", "cdefgh"};
Stream<String> stream2 = Arrays.stream(strArr);
long count = stream2.filter(s->s.length() >= 5).count();
System.out.println("배열에서 크기가 5이상인 문자열은 " + count + "개 입니다");
// stream1 은 최종 연산까지 진행한 상태이므로 다시 사용할 수 없고,
// 새로운 stream 클래스를 생성해서 사용해야 한다.
}
}

- 스트림 클래스는 이처럼 우리가 필요한 기능들을 미리 만들어 놓았기 때문에 매우 편리하다.
package stream;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
public class Ex2 {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("Tomas");
list.add("Edward");
list.add("Jack");
Stream<String> stream1 = list.stream();
stream1.filter(s -> s.length() >= 5).sorted().forEach(s -> System.out.println(s));
System.out.println();
list.stream().map(s -> s.length()).forEach(n -> System.out.println(n));
}
}


package stream;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class Ex3 {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(5, 1, 2, 4, 3);
Stream<Integer> stream = list.stream(); // 리스트에서 스트림 생성
int sum = stream.mapToInt(n -> n.intValue()).sum();
list.stream().sorted().forEach(n -> System.out.println(n));
System.out.println("스트림 정렬 후 리스트: " + list);
list.stream().filter(n -> n >= 3).sorted().forEach(n -> System.out.println(n));
}
}

- 스트림은 원본 자료를 변경하지 않는다는 것을 확인할 수 있는 예제이다.
Q.
패키지 여행을 떠나는 고객들이 있다. 고객의 정보는 TravelCustomer 클래스에 담는다. (이름, 나이, 여행비용)
그리고 TravelCustomer 형 리스트에 고객 명단을 담는다.
고객의 명단 출력, 여행의 총 비용 출력, 20세 이상 고객 명단 출력
package stream;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
class TravelCustomer {
String name;
int age;
int cost;
public TravelCustomer(String name, int age, int cost) {
super();
this.name = name;
this.age = age;
this.cost = cost;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getCost() {
return cost;
}
public void setCost(int cost) {
this.cost = cost;
}
}
public class Q1 {
public static void main(String[] args) {
List<TravelCustomer> travelCustomerList = new ArrayList<TravelCustomer>();
TravelCustomer duli = new TravelCustomer("둘리", 40, 100);
TravelCustomer ddochi = new TravelCustomer("또치", 13, 50);
TravelCustomer downer = new TravelCustomer("도우너", 25, 70);
travelCustomerList.add(duli);
travelCustomerList.add(ddochi);
travelCustomerList.add(downer);
//1.
System.out.println("== 고객 명단 추가된 순서대로 출력 ==");
travelCustomerList.stream()
.map(c->c.getName())
.forEach(s->System.out.println(s));
//2.
int total = travelCustomerList.stream()
.mapToInt(c->c.getCost())
.sum();
System.out.println("총 여행 비용 :" + total);
//3.
System.out.println("== 20세 이상 고객 명단 정렬하여 출력 ==");
travelCustomerList.stream()
.filter(c->c.getAge() >= 20).map(c->c.getName()).sorted()
.forEach(s->System.out.println(s));
}
}

- 리스트에 객체를 담은 후 객체 안의 정보를 stream 과 함께 사용했다.
- 위 예제에서는 객체를 리스트에 담았기 때문에 각 객체의 정보를 getter 를 사용해서 사용했다.
'[그린컴퓨터] Server > JAVA(자바 JDK)' 카테고리의 다른 글
| 자바 입출력과 스트림 { Scanner 클래스, 입력스트림과 출력스트림, 바이트&문자 스트림, 기반&보조 스트림 } (0) | 2023.07.04 |
|---|---|
| 예외처리 { 예외클래스, 예외처리, 컴파일러의 예외체크, 예외처리미루기 } (0) | 2023.07.04 |
| 람다식 { 함수형 프로그래밍, 람다식, 연습문제 } (0) | 2023.07.03 |
| 내부클래스 { 개요, 종류, 제약사항, 익명 클래스 } (0) | 2023.07.03 |
| 컬렉션 프레임워크 { 정의, Collection 인터페이스, Map 인터페이스, 실습준비 } (0) | 2023.06.09 |