티스토리 뷰
반응형
Stream (스트림)
스트림은 자바8부터 추가된 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자이다. 데이터 컬렉션 반복을 멋지게 처리하는 기능이라고 생각하면 이해가 쉽다.
Iterator와 비슷한 역할을 하지만 람다식으로 처리하기 때문에 코드를 좀 더 간결하게 할 수 있으며, 내부 반복자를 사용하므로 병렬처리가 쉽다는 점에서 차이가 있다.
Iterator를 이용해 ArrayList의 요소를 모두 처리하기 위한 방법은 다음과 같다.
ArrayList<Integer> arrayList = new ArrayList<Integer>(Arrays.asList(1,2,3));
Iterator<Integer> iter = arrayList.iterator();
while(iter.hasNext()) {
int num = iter.next();
System.out.println(num);
}
Stream의 반복 순회
ArrayList<Integer> arrayList = new ArrayList<Integer>(Arrays.asList(1,2,3));
Stream<Integer> str = arrayList.stream();
str.forEach(num -> System.out.println(num));
stream() 메소드로 Stream 객체를 만들어 저장한 후, forEach 메소드로 ArrayList의 요소를 모두 처리합니다.
이 때, 람다식을 이용합니다.
스트림 예제
1) String 배열
sorted() 라는 정렬 메소드를 사용하여 정렬 후 forEach() 메소드를 통해 각 요소를 출력
String[] sArray = { "박새롬", "김영미", "김철수"};
Stream<String> sStream = Arrays.stream(sArray);
sStreams.sorted().forEach(str -> System.out.println(str));
2) int 배열
sum() 메소드를 이용해 배열 요소들의 합을 구하여 출력
int[] iArray = { 1, 2, 3, 4, 5 };
IntStream iStream = Arrays.stream(iArray);
int sumValue = iStream.sum();
System.out.println(sumValue);
3) Class (클래스)
class Animal {
private String name;
private int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() { return name; }
public int getAge() { return age; }
}
public class StreamExample {
public static void main(String[] args) {
List<Animal> animaList = Arrays.asList(
new Animal("Horse", 10),
new Animal("Dog", 20),
new Animal("Tiger", 10)
);
Stream<Animal> stream = animaList.stream();
stream.forEach(a -> System.out.println("이름 : "+ a.getName()));
}
}
4) reduce() 함수 사용
reduce() 는 프로그래머가 직접 지정하는 연산을 적용한다.
함수의 첫번째 요소로 전달하는 것은 초깃값, 두번째 요소는 기능을 수행할 람다식이다.
아래 코드는 reduce() 를 이용하여 int 배열의 요소들의 모든 합을 출력하는 내용이다.
public class ReduceTest {
public static void main(String[] args){
int[] arr = {1, 2, 3, 4, 5};
System.out.println(Arrays.stream(arr).reduce(0, (a,b)-> a + b));
}
}
반응형
'Java > 개념정리' 카테고리의 다른 글
[ Spring ] Java 설정 파일 사용 및 설명 (@Configuration, @Bean, @EnableWebMvc) (0) | 2021.02.19 |
---|---|
[ Java ] JDBC - PreparedStatement (0) | 2020.12.08 |
[ Java ] JDBC 사용하는 방법 (0) | 2020.12.08 |
[ Java ] Java Collection ( 컬렉션 ) 정리 (0) | 2020.11.28 |
[ Java ] abstract 와 interface의 기능 및 차이점 알아보기 (0) | 2020.11.27 |
댓글