Stream이란?
- 병렬처리를 지원하는 내부 반복자
- 컬렉션이나 배여를 스트림으로 변환하여 여러가지 형태의 처리를 할 수 있다.
- 반복문을 이용하던 기존의 컬렉션을 스트림으로 처리할 수 있다.
스트림을 사용하는 이유
1.정렬 , 필터링 , 맵핑 등을 통해 지저분하고 중복되던 반복문 코드가 사라짐
2.데이터를 제어하는 주체가 RDB 에서 JAVA 로 옮겨짐
- 이유
- 데이터가 늘어남에 따라 데이터를 정제하는 RDB 능력의 한계가 드러남
- 비정형 데이터를 RDB 에서 정제할 수 없음
public class BasicStream {
public static void main(String[] args) {
List<DishVO> dishes = new ArrayList<DishVO>();
dishes.add(new DishVO("Pork", 1000, "MEET"));
dishes.add(new DishVO("Salmon", 500, "FISH"));
dishes.add(new DishVO("Beef", 1200, "MEET"));
dishes.add(new DishVO("Chicken",900, "MEET"));
dishes.add(new DishVO("Pizza", 1500, "OTHER"));
dishes.add(new DishVO("Rice", 300, "OTHER"));
dishes.add(new DishVO("French Fries", 700, "OTHER"));
dishes.stream()
.filter((dish)->{
System.out.println(">>"+dish.getCalories());
return dish.getCalories()<=1000;
})
.forEach((dish)->{
System.out.println(dish.getName());
System.out.println(dish.getCalories());
System.out.println(dish.getCategory());
});
dishes.stream()
.filter((dish)->dish.getName().length()>=5)
.forEach((dish) ->{
System.out.println(":::"+dish.getName());
});
dishes.stream()
.filter((dish)->dish.getName().length()<5)
.forEach((dish)->{
System.out.println("<<"+dish.getName());
});
dishes.stream()
.filter((dish)->dish.getName().startsWith("P"))
.forEach((dish)->{
System.out.println("[]"+dish.getName());
});
dishes.stream()
.filter((dish)->dish.getCategory().contains("OTHER"))
.forEach((dish)->{
System.out.println(dish.getName()+" "+
dish.getCalories()+" "+
dish.getCategory());
});
long count=dishes.stream()
.filter((dish)->dish.getCalories()<500)
.count();
System.out.println(count);
dishes.stream()
.filter((dish)->dish.getCalories()>500&&dish.getName().length()>6)
.forEach((dish)->{
System.out.println("%"+dish.getCalories()+
dish.getName());
});
dishes.stream()
.map((dish) -> dish.getName().length())
.distinct()
.forEach((len)->{
System.out.println(len);
});
}
}