Maison  >  Article  >  Java  >  Comment déboguer les flux Java à l'aide d'IntelliJ

Comment déboguer les flux Java à l'aide d'IntelliJ

王林
王林avant
2023-04-26 22:01:061444parcourir

Principe

Commençons par un simple Stream pour lequel nous pouvons créer un débogueur Stream de base dans IntelliJ :

.sorted()

.collect(toList());

Le code ci-dessus crée un Stream composé des chaînes « A », « B » et « C ». Ce Stream est ensuite trié(), créant un nouveau Stream (au moins en Java 8-10) dont les éléments sont dans l'ordre alphabétique des éléments du premier Stream. En d'autres termes, le deuxième Stream contient trois éléments : "A", "B" et "C". Enfin, ceux-ci placent les éléments dans une liste.

Stream s0 = Stream.of("C", "B", "A"); // "C", "A", "B"

Stream s1 = s0.sorted(); // "A", "B", "C"

Liste strings = s1.collect(toList()); // ["A", "B", "C"]

Cela démontre généralement le fonctionnement du débogueur Stream. Il divise une opération de pipeline de flux en plusieurs fragments de code et appelle des opérations intermédiaires étape par étape, afin que le contenu des éléments de chaque opération puisse être conservé pour analyse.

Stream.of("C", "B", "A")

.peek(saveStep(0))

.sorted()

.peek(saveStep(1))

.collect(toList()); // Le résultat final est enregistré à l'étape 2

REMARQUE : La mise en œuvre technique réelle n'est pas comme celle-ci, elle fournit simplement un bon aperçu.

Il existe une représentation plus visuelle dans le débogueur d'IntelliJ :

Il affiche de manière concise et claire les détails de chaque opération intermédiaire dans le pipeline Stream, ainsi que le résultat final.

Appelez

Si vous souhaitez appeler le débogueur de flux, vous devez d'abord définir un point d'arrêt au niveau de la définition du flux :

Ensuite, démarrez une session de débogage (exécutée en mode débogage) :

Lorsqu'un point d'arrêt est atteint, vous pouvez appuyer sur le bouton spécifié (qui peut être difficile à trouver) pour appeler le débogueur Stream, qui est marqué d'un cercle rouge ci-dessous :

Cela ouvre le débogueur de flux, comme indiqué ci-dessus.

Flux de base de données

J'utiliserai Speedment (stream ORM), qui permet d'interroger la base de données via des opérations Java Streams standard et donc des opérations de débogage via IntelliJ. Un projet Speedment peut être créé via l'initialiseur Speedment.

Une application Java peut être créée des manières suivantes.

Application Speedment = nouveau SakilaApplicationBuilder()

.withPassword("sakila-password") // Remplacez par votre propre mot de passe

.build();

FilmManager films = app.getOrThrow(FilmManager.class);

Nous pouvons maintenant diffuser la table "film" de la base de données. Voici un exemple :

Liste .filter(Film.LENGTH.equal(60))

.sorted(Film.RATING.reversed())

.collect(toList());

Le code filtrera tous les objets Film d'une durée de 60 minutes, puis triera les objets Film (par ordre décroissant) par Film.RATING, et enfin placera tous les éléments dans une liste.

Lorsque nous appellerons le débogueur Stream, nous verrons l'image suivante :

Nous pouvons voir qu'il y a 1000 films dans le flux initial. Après l'opération de filtrage, il ne reste que 8 films, qui sont ensuite triés et mis dans une liste.

Calculer des statistiques

Supposons que nous souhaitions calculer la durée minimale, maximale et moyenne de tous les films classés PG-13 (un type de système de classification des films). Le code est le suivant :

IntSummaryStatistics stat = films.stream()

.filter(Film.RATING.equal("PG-13"))

.mapToInt(Film.LENGTH.asInt())

.summaryStatistics();

Comme vous pouvez le voir, nous pouvons interagir avec le débogueur Stream et cliquer sur les éléments du pipeline de flux pour les mettre en surbrillance, et nous pouvons également faire défiler les éléments pour afficher les étapes individuelles.

Speedment optimise les opérations intermédiaires de la base de données Stream et les intègre dans les requêtes SQL. Mais lors de l'utilisation du débogueur Stream, l'optimisation ne prend pas effet afin que nous puissions voir toutes les étapes de fonctionnement dans le pipeline Stream.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer