Java에는 Stream이라는 강력한 기능이 있습니다.
Stream은 Java 8부터 도입된 기능으로, 함수형 프로그래밍 스타일을 지원하여 Collection을 다루는 강력한 도구입니다.
Stream의 특징은 요소들의 연속된 시퀀스를 만들어 데이터를 처리하기 위한 다양한 연산을 제공할수있다점입니다. 그덕에 중간 가공을 할수있고 추가로 parallelStream을 이용하여 병렬처리를 간단하게 구축할수있다는 것입니다.
//배열
String[] arr = new String[]{"a", "b", "c"};
Stream<String> stream = Arrays.stream(arr);
Stream<String> streamOfArrayPart =
Arrays.stream(arr, 1, 3); // 1~2 요소 [b, c]
//컬랙션
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = numbers.stream();
Stream<Integer> squaredNumbers = numbers.stream()
.map(n -> n * n)
.filter(n -> n % 2 == 0)
.sorted();
squaredNumbers.forEach(System.out::println);
Kotlin에서는 Collection 확장 함수 map(), filter(), reduce()등 Collection 스코프함수들을 지원하고 다른 스코프함수도 병렬처리시에는 시퀀스나 플로우등 여러방법으로 Stream을 대체할수 있게 되었습니다.
그러나 Kotlin은 Java와의 상호 운용성을 중요시하기 때문에 Java의 Stream API도 Kotlin에서 사용할 수 있습니다. Java의 Stream을 Kotlin에서 사용할 때는 일반적으로 Kotlin의 확장 함수와 조합하여 사용하거나, Java와 Kotlin 코드를 혼합하여 사용할 수 있습니다.
reference
https://futurecreator.github.io/2018/08/26/java-8-streams/