Post

Java 스트림 마지막 Element 얻기

1. Reduce API 사용

Reduce는 Stream의 요소 집합을 단일 요소로 줄인다.

이 경우 스트림의 마지막 요소를 가져오기 위해 요소 집합을 줄인다. 이 방법은 순차 스트림에 대한 결정론적 결과만 반환한다.

List String을 사용 하고 List에서 스트림을 가져온 다음 다음을 줄인다.

1
2
3
4
5
6
7
8
List<String> valueList = new ArrayList<>();
valueList.add("Joe");
valueList.add("John");
valueList.add("Sean");

Stream<String> stream = valueList.stream();
stream.reduce((first, second) -> second)
  .orElse(null);

여기서 스트림은 마지막 요소만 남게 되는 수준으로 축소된다. 스트림이 비어 있으면 null 값을 반환한다.

2. 건너뛰기 기능 사용

스트림의 마지막 element를 가져오는 다른 방법은 그 앞의 모든 요소를 ​​건너뛰는 것 이다. 이는 Stream 클래스의 Skip 기능을 사용하여 달성할 수 있다. 이 경우 Stream을 두 번 소비하므로 성능에 어느 정도 영향이 있다.

문자열 값 목록을 만들고 해당 크기 함수를 사용하여 마지막 element에 도달하기 위해 건너뛸 element 수를 결정한다.

다음은 Skip을 사용하여 마지막 element를 가져오는 예제 코드이다.

1
2
3
4
5
6
7
8
9
List<String> valueList = new ArrayList<String>();
valueList.add("Joe");
valueList.add("John");
valueList.add("Sean");

long count = valueList.stream().count();
Stream<String> stream = valueList.stream();
   
stream.skip(count - 1).findFirst().get();

“Sean”은 결국 마지막 element가 된다.

3. Infinite Stream 마지막 Element 얻기

무한 스트림의 마지막 element를 얻으려고 하면 무한 element에 대해 무한한 평가 시퀀스가 ​​수행된다. 제한 작업을 사용하여 무한 스트림을 특정 수의 element로 제한하지 않으면 건너뛰기와 축소 모두 평가 실행에서 돌아오지 않는다.

다음은 무한 스트림을 가져와 마지막 element를 가져오려고 시도한 예제 코드이다.

1
2
Stream<Integer> stream = Stream.iterate(0, i -> i + 1);
stream.reduce((first, second) -> second).orElse(null);

결과적으로 스트림은 평가에서 돌아오지 않으며 결국 프로그램 실행이 중단 된다.

[출처 및 참고]

This post is licensed under CC BY 4.0 by the author.