Java Stream - 01. Stream이란

JAVA 8에 소개된 추상화 개념이며, 데이터의 흐름이라고 이해하면 쉽다. 다시말해 stream 의미 그대로 시냇물이며, 그 내부에는 각각의 데이터란 물고기가 존재한다.

Stream 생성

Array에서 생성

Long[] ids = {1L, 2L, 3L, 4L};

// case #1
Stream<Long> idStreamA = Arrays.stream(ids);

// case #2
Stream<Long> idStreamB = Stream.of(ids);

// case #3
Stream<Long> idStreamC = Stream.of(ids[0], ids[1], ids[2], ids[3]);

// case #4 빌더 활용
Stream.Builder<Long> idStreamBuilder = Stream.builder();

for (Long id : ids) {
    idStreamBuilder.accept(id);
}

Stream<Long> idStreamD = idStreamBuilder.build();

List에서 생성

Long[] ids = {1L, 2L, 3L, 4L};
List<Long> idList = new ArrayList<>(Arrays.asList(ids));

Stream<Long> idStreamA = idList.stream();

Stream operation

filter

Stream내 데이터를 필터링한다.

Long[] ids = {1L, 2L, 3L, 4L}
Stream<Long> idStream = Arrays.stream(ids);

idStream
	.filter(id -> id % 2 == 0)
	.forEach(System.out::println);

/* Result
2
4
*/

map

Stream내 데이터를 가공한다.

Long[] ids = {1L, 2L, 3L, 4L};
Stream<Long> idStream = Arrays.stream(ids);

idStream
	.filter(id -> id % 2 == 0)
	.map(id -> id + 10)
	.forEach(System.out::println);

/* Result
12
14
*/

sorted

Stream내 데이터를 정렬한다.

Long[] ids = {1L, 2L, 3L, 4L};
Stream<Long> idStream = Arrays.stream(ids);

idStream
	.filter(id -> id % 2 == 0)
	.map(id -> id + 10)
	.sorted(Comparator.reverseOrder())
	.forEach(System.out::println);

/* Result
14
12
*/

limit

Stream내 데이터 수를 한정한다.

Long[] ids = {1L, 2L, 3L, 4L};
Stream<Long> idStream = Arrays.stream(ids);

idStream
	.limit(2)
	.forEach(System.out::println);

/* Result
1
2
*/

skip

Stream내 데이터 중 첫번째 요소부터 제외시킨다.

Long[] ids = {1L, 2L, 3L, 4L};
Stream<Long> idStream = Arrays.stream(ids);

idStream
	.skip(1)
	.limit(2)
	.forEach(System.out::println);

/* Result
2
3
*/

reduce

Stream의 여러 데이터들을 연산을 통해서 하나의 결과값으로 출력

Long[] ids = {1L, 2L, 3L, 4L};
Stream<Long> idStream = Arrays.stream(ids);

Long sum = idStream
	.reduce(Long::sum).orElse(null);

/* Result
10
*/

collect

Stream을 데이터구조로 실체화한다.

Long[] ids = {1L, 2L, 3L, 4L};
Stream<Long> idStream = Arrays.stream(ids);

List<Long> idList = idStream
  .filter(id -> id % 2 == 0)
  .map(id -> id + 10)
  .sorted(Comparator.reverseOrder())
  .collect(Collectors.toList());

/* Result
[14, 12]
*/

Leave a comment