원칙
IntelliJ에서 기본 Stream 디버거를 생성할 수 있는 간단한 Stream부터 시작해 보겠습니다.
.sorted()
.collect(toList());
위의 코드는 문자열 "A", "B" 및 "C"로 구성된 스트림을 생성합니다. 그런 다음 이 스트림은 sorted()되어 요소가 첫 번째 스트림 요소의 알파벳 순서인 새 스트림(적어도 Java 8-10)을 생성합니다. 즉, 두 번째 스트림에는 "A", "B", "C"라는 세 가지 요소가 포함됩니다. 마지막으로 요소를 목록에 넣습니다.
Stream
스트림
List
이는 일반적으로 Stream 디버거가 작동하는 방식을 보여줍니다. 스트림 파이프라인 작업을 여러 코드 조각으로 분할하고 중간 작업을 단계별로 호출하므로 각 작업의 요소 콘텐츠를 분석용으로 보관할 수 있습니다.
Stream.of("C", "B", "A")
.peek(saveStep(0))
.sorted()
.peek(저장단계(1))
.collect(toList()); // 최종 결과는 2단계에 저장됩니다
참고: 실제 기술 구현은 이와 같지 않으며 단지 좋은 개요를 제공할 뿐입니다.
IntelliJ의 디버거에는 더 많은 시각적 표현이 있습니다:
Stream 파이프라인의 모든 중간 작업에 대한 세부 정보와 최종 결과를 간결하고 명확하게 표시합니다.
전화
스트림 디버거를 호출하려면 먼저 스트림 정의에 중단점을 설정해야 합니다.
그런 다음 디버깅 세션을 시작합니다(디버그 모드에서 실행).
중단점에 도달하면 지정된 버튼(찾기 어려울 수 있음)을 눌러 아래 빨간색 원으로 표시된 스트림 디버거를 호출할 수 있습니다.
위와 같이 스트림 디버거가 열립니다.
데이터베이스 스트림
저는 표준 Java Streams 작업을 통해 데이터베이스를 쿼리하고 IntelliJ를 통해 작업을 디버깅할 수 있는 Speedment(스트림 ORM)를 사용할 것입니다. Speedment 프로젝트는 Speedment 이니셜라이저를 통해 생성할 수 있습니다.
Java 애플리케이션은 다음과 같은 방법으로 생성할 수 있습니다.
Speedment 앱 = 새로운 SakilaApplicationBuilder()
.withPassword("sakila-password") // 자신의 비밀번호로 바꾸세요
.build();
FilmManager 영화 = app.getOrThrow(FilmManager.class);
이제 데이터베이스 "film" 테이블을 스트리밍할 수 있습니다. 예는 다음과 같습니다.
목록<영화> 맵 =films.stream()
.filter(Film.LENGTH.equal(60))
.sorted(Film.RATING.reversed())
.collect(toList());
코드는 길이가 60분인 모든 Film 개체를 필터링한 다음 Film.RATING을 기준으로 Film 개체를 내림차순으로 정렬하고 마지막으로 모든 요소를 목록에 넣습니다.
스트림 디버거를 호출하면 다음 그림이 표시됩니다.
초기 스트림에는 1000개의 영화가 있는 것을 볼 수 있습니다. 필터링 작업을 수행하면 8개의 영화만 남게 되며 이를 정렬하여 목록에 넣습니다.
통계 계산
PG-13(영화 등급 시스템의 일종) 등급을 받은 모든 영화의 최소, 최대 및 평균 지속 시간을 계산한다고 가정해 보겠습니다. 코드는 다음과 같습니다:
IntSummaryStatistics stat =films.stream()
.filter(Film.RATING.equal("PG-13"))
.mapToInt(Film.LENGTH.asInt())
.summary통계();
보시다시피 스트림 디버거와 상호 작용하고 스트림 파이프라인의 요소를 클릭하여 강조 표시할 수 있으며, 요소 사이를 스크롤하여 개별 단계를 볼 수도 있습니다.
Speedment는 데이터베이스 스트림 중간 작업을 최적화하고 이를 SQL 쿼리에 통합합니다. 그러나 Stream 디버거를 사용하면 Stream 파이프라인의 모든 작업 단계를 볼 수 있도록 최적화가 적용되지 않습니다.
위 내용은 IntelliJ를 사용하여 Java 스트림을 디버깅하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!