Java Project : 15_stream
Package : stream
Class : StreamMain01.java
스트림(Stream)
스트림(Stream)은 자바 8 API에 새로 추가된 기능이다.
람다를 활용해 배열과 컬렉션을 함수형으로 간단하게 처리할 수 있는 기술이다.
StreamMain01.java
package stream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Stream;
public class StreamMain01 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("이제훈");
list.add("엄태구");
list.add("이동욱");
list.add("안효섭");
list.add("이준기");
list.add("나인우");
for(int i=0; i<list.size(); i++) { //외부반복
System.out.println(list.get(i));
}
System.out.println();
Iterator<String> it = list.iterator();//외부반복
while(it.hasNext()) {
System.out.println(it.next());
}
System.out.println();
Stream<String> stream = list.stream(); //내부반복
//stream.forEach(name -> System.out.println(name));
System.out.println();
stream.forEach(System.out :: println);
}
}
이제훈
엄태구
이동욱
안효섭
이준기
나인우
Lombok 쓸 때
- Eclipse에 연결되어있나 확인
2. *.jar를 Java Project에 복사한다.
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
class Food {
String name;
int calorie;
}
package stream;
import java.util.ArrayList;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
class Food {
String name;
int calorie;
}
//-------------
public class StreamMain02 {
public static void main(String[] args) {
Food aa = new Food("탕수육", 616);
Food bb = new Food("라면", 460);
Food cc = new Food("돈까스", 960);
Food dd = new Food("떡볶이", 482);
Food ee = new Food("짜장면", 670);
List<Food> list = new ArrayList<>();
list.add(aa);
list.add(bb);
list.add(cc);
list.add(dd);
list.add(ee);
//calorie가 500 넘는 음식만 골라서 오름차순으로 정렬하여 음식명 출력하시오.
List<Food> calorieList = new ArrayList<Food>();
for(Food food : list) {
if(food.getCalorie() > 500) {
calorieList.add(food);
}
}
//Comparator<> com = new Comparator<T>() {};
Collections.sort(calorieList, new Comparator<Food>() {
@Override
public int compare(Food f1, Food f2) {
return Integer.compare(f1.getCalorie(), f2.getCalorie());
}
});
List<String> foodName = new ArrayList<String>();
for(Food food : calorieList) {
foodName.add(food.getName());
}
System.out.println(foodName);
System.out.println();
[탕수육, 짜장면, 돈까스]
//스트림 이용
List<String> foodNameList = list.stream()
.filter(f -> f.getCalorie() > 500)
.sorted(Comparator.comparing(Food :: getCalorie))
.map(f -> f.getName())
.collect(Collectors.toList()); //List 변환
System.out.println(foodNameList);
[탕수육, 짜장면, 돈까스]
.reduce(초기값, (누적변수, 요소) -> 처리문)
.reduce()는 Stream의 요소들을 하나의 데이터로 만드는 작업을 수행
// .reduce(초기값, (누적변수, 요소) -> 처리문)
// .reduce()는 Stream의 요소들을 하나의 데이터로 만드는 작업을 수행
IntStream stream = IntStream.range(1, 5); //range() 끝수를 포함하지 않는다. 1, 2, 3, 4
int sum = stream.reduce(0, (total, num) -> total + num);
System.out.println("합계 = " + sum);
합계 = 10
IntStream stream2 = IntStream.rangeClosed(1, 5); //rangeClosed() 끝 수를 포함한다. 1, 2, 3, 4, 5
stream2.forEach(x -> hap+=x);
System.out.println("합계 = " + hap);
합계 = 15
'JAVA' 카테고리의 다른 글
DAY 16 - LOMBOK / 시퀀스 객체 / JDBC / DB 연결 (2024.07.24) (0) | 2024.08.09 |
---|---|
DAY 17 - MEMBER (2024.07.25) (0) | 2024.08.08 |
DAY 19 - Lambda (2024.07.29) (0) | 2024.08.07 |
DAY 20 - Network (2024.07.30) (0) | 2024.08.07 |
DAY 21 - Network Thread (2024.07.31) (0) | 2024.08.06 |