Java에서 스트림의 마지막 요소를 얻는 방법은 무엇입니까?

1. 개요

Java Stream API는 Java 8 릴리스의 주요 기능이었습니다. 스트림 은 느리게 평가 된 객체 시퀀스를 나타내며 풍부하고 유창하며 모나 딕과 유사한 API를 제공합니다.

이 기사에서는 스트림 의 마지막 요소를 가져 오는 방법에 대해 간략히 살펴 보겠습니다 . 있다는 사실을 숙지 인해 스트림의 특성은 자연적인 작업이 아니다 . 항상 무한 스트림으로 작업하고 있지 않은지 확인하십시오 .

2. Reduce API 사용

간단히 말해서 ReduceStream 의 요소 집합을 단일 요소로 줄입니다.

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

하자가 사용 목록문자열 얻가, 값을 스트림 으로부터 목록 감소 다음과 :

List valueList = new ArrayList(); valueList.add("Joe"); valueList.add("John"); valueList.add("Sean"); Stream stream = valueList.stream(); stream.reduce((first, second) -> second) .orElse(null); 

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

2. 스킵 기능 사용

스트림의 마지막 요소를 가져 오는 다른 방법은 앞에있는 모든 요소를 ​​건너 뛰는 것 입니다. 이는 Stream 클래스의 Skip 기능을 사용하여 수행 할 수 있습니다 . 이 경우에는 Stream을 두 번 사용하므로 성능에 분명한 영향이 있습니다.

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

다음은 skip을 사용하여 마지막 요소를 가져 오는 예제 코드입니다 .

List valueList = new ArrayList(); valueList.add("Joe"); valueList.add("John"); valueList.add("Sean"); long count = valueList.stream().count(); Stream stream = valueList.stream(); stream.skip(count - 1).findFirst().get(); 

"Sean" 이 마지막 요소가됩니다.

4. 무한 스트림의 마지막 요소 얻기

무한 스트림의 마지막 요소를 얻으려고하면 무한 요소에 대해 무한한 평가 시퀀스가 ​​수행됩니다. 제한 연산을 사용하여 무한 스트림을 특정 요소 수로 제한하지 않는 한 skipreduce 는 모두 평가 실행에서 돌아 오지 않습니다 .

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

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

결과적으로 스트림은 평가에서 돌아 오지 않고 결국 프로그램 실행을 중지 하게됩니다 .

5. 결론

우리는 reduceSkip API를 사용하여 Stream 의 마지막 요소를 얻는 다양한 방법을 보았습니다 . 무한 스트림에서는 이것이 불가능한 이유도 조사했습니다.

Stream 에서 마지막 요소 를 가져 오는 것이 다른 데이터 구조에서 가져 오는 것과 비교하면 쉽지 않다는 것을 알았습니다 . 이는 터미널 함수가 호출 되지 않고 현재 평가 된 요소가 마지막 요소인지 알 수 없는 한 평가되지 않는 Streams 의 게으른 특성 때문입니다 .

코드 조각은 GitHub에서 찾을 수 있습니다.