자바 8부터 새로 추가된 java.util.stream
패키지에는 스트림 API들이 포진하고 있다. 패키지 내용을 보면 BaseStream 인터페이스를 부모로 해서 자식 인터페이스들이 다음과 같은 상속 관계를 이루고 있다.
이 스트림 인터페이스의 구현 객체는 다양한 소스로부터 얻을 수 있다.
주로 컬렉션과 배열에서 얻지만, 다음과 같은 소스로부터 스트림 구현 객체를 얻을 수도 있다.
다음 예제는 List<Student>
컬렉션에서 Stream<Student>
를 얻어내고 요소를 콘솔에 출력한다.
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class FromCollectionExample {
public static void main(String[] args) {
List<Student> studentList = Arrays.asList(
new Student("김", 10),
new Student("이", 20),
new Student("박", 30)
);
Stream<Student> stream = studentList.stream();
stream.forEach(s -> System.out.println(s.getName()));
}
}
김
이
박
import java.util.Arrays;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class FromArrayExample {
public static void main(String[] args) {
String[] strArray = {"김", "이", "박"};
Stream<String> strStream = Arrays.stream(strArray);
strStream.forEach(a -> System.out.print(a + ", "));
System.out.println();
int[] intArray = {1, 2, 3, 4, 5};
IntStream intStream = Arrays.stream(intArray);
intStream.forEach(a -> System.out.print(a + ", "));
System.out.println();
}
}
김, 이, 박,
1, 2, 3, 4, 5,
IntStream()의 rangeClosed()
메소드를 이용해서 1부터 100까지의 합을 구할 수 있다.
rangeClosed()
메소드는 첫 번째 매개값에서부터 두 번째 매개값까지 순차적으로 제공하는 IntStream을 리턴한다.
참고로 IntStream의 또 다른 range()
메소드도 동일한 IntStream을 리턴하는데, 두 번째 매개값은 포함하지 않는다.
import java.util.stream.IntStream;
public class FromIntRangeExample {
public static int sum;
public static void main(String[] args) {
IntStream stream = IntStream.rangeClosed(1, 100);
stream.forEach(a -> sum += a);
System.out.println("총합: " + sum);
}
}
총합: 5050
이것이 자바다 책