728x90
문제
스트림으로 백준 알고리즘 연습 도중 발생, 코드는 다음과 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.OptionalInt;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Stream<String> str = Arrays.stream(br.readLine().split(" "));
OptionalInt min = str
.mapToInt(Integer::parseInt)
.min();
OptionalInt max = str
.mapToInt(Integer::parseInt)
.max();
System.out.printf("%d %d",min.getAsInt(),max.getAsInt());
}
}
발생한 이유는 다음과 같다.
Stream str = Arrays.stream(br.readLine().split(" "));
위와 같이 스트림을 만들어서 min = str.maptoInt.... 로 이미 1회 실행했다.
그렇다면 str, 즉 생성된 Stream은 이미 사용되었기 때문에 이미 작성되었거나 스트림이 닫혔다는 에러가 발생하는 것이다.
해결 방법
다음과 같이 Stream을 생성한 상태로 코드를 작성하지 않고 각각의 개별 Stream을 생성하는 것을 택했다.
String[] str = br.readLine().split(" ");
OptionalInt min = Arrays.stream(str)
.mapToInt(Integer::parseInt)
.min();
OptionalInt max = Arrays.stream(str)
.mapToInt(Integer::parseInt)
.max();
728x90
'Software Backend > Java & Spring' 카테고리의 다른 글
협업을 위한 snake_case -> camelCase 변환 방법 @JsonNaming, @JsonProperty (0) | 2021.11.22 |
---|---|
객체 지향, 오브젝트와 의존 관계의 이해 (0) | 2021.10.09 |
API 명세서 뜯어보기 - StringTokenizer Class (0) | 2021.10.05 |
API 명세서 뜯어보기 - Functional interface (0) | 2021.10.02 |
API 명세서 뜯어보기 - StringBuilder && StringBuffer Class (0) | 2021.09.28 |