Je veux écrire une boucle qui fait référence à un index avec l'API Stream de Java 8

Tout le monde aime l'API Stream, Les boucles comme l'écriture dans une instruction for étendue sont propres, Je ne sais pas quoi faire avec une boucle qui veut faire référence à l'index à l'intérieur de la boucle. (Il existe un moyen de créer votre propre classe même si vous en faites le tour: persévérez :)

Alors j'ai tourné un peu la tête.


Les cas suivants sont supposés être des "boucles qui veulent faire référence à l'index à l'intérieur de la boucle".

――Je veux tourner deux listes ou plus ensemble --Je veux aussi faire référence à des éléments adjacents dans une liste (comme ʻi-1 ou ʻi + 1 pour ʻi`)

(Parce que vous pouvez faire référence à ʻi` et écrire votre processus préféré Il peut également être utilisé dans des cas tels que "Je souhaite modifier le processus au début / à la fin de la liste", Je pense que ce n'est pas très beau. )

Voici un exemple de code.

    public static void main(String[] args) {
        //Liste appropriée composée de nombres aléatoires
        List<Integer> listA = new ArrayList<>(Arrays.asList(12, 23, 66, 45, 10, 48, 21, 25, 68, 65));
        List<Integer> listB = new ArrayList<>(Arrays.asList(98, 96, 4, 33, 30, 38, 39, 25, 32, 64));

        //Cas 1: si vous souhaitez gérer deux listes ensemble
        List<Boolean> isWinnerA = IntStream.range(0, Math.min(listA.size(), listB.size()))
                .mapToObj(i -> listA.get(i) > listB.get(i))
                .collect(Collectors.toList());
        System.out.println("isWinnerAList: " + isWinnerAList);
        // -> isWinnerA: [false, false, true, true, false, true, false, false, true, true]

        //Cas 2: Si vous souhaitez gérer le recto et le verso de la liste ensemble
        List<Double> movingAverage = IntStream.range(0, listA.size() - 1)
                .mapToObj(i -> (listA.get(i) + listA.get(i + 1)) / 2d)
                .collect(Collectors.toList());
        System.out.println("movingAverage: " + movingAverage);
        // -> movingAverage: [17.5, 44.5, 55.5, 27.5, 29.0, 34.5, 23.0, 46.5, 66.5]
    }

En tant que composition,

--for (int i; i <list.size (); i ++) partie --Créé avec la méthode d'usine de ʻIntStream --Pour une simple augmentation comme dans l'exemple, vous pouvez utiliserrange (startInclusive, endExclusive) --Si vous voulez changer la grandeur de l'incrément, ʻiterate (seed, f) .limit (maxSize)(bien que vous puissiez vous référer à ʻi * 2`)


pro: vous ne pouvez écrire qu'avec les standards con: Stream Vous pouvez être confus si vous n'y êtes pas habitué

Est-il dit qu'il vaut mieux écrire normalement dans une phrase for? Eh bien, si c'est celui utilisé dans l'exemple, cela peut être normal pour le document, mais peut-il être utilisé dans des cas tels que filter (), le traitement d'agrégation et les fonctions Stream? Je pense.

Recommended Posts

Je veux écrire une boucle qui fait référence à un index avec l'API Stream de Java 8
Je voulais écrire un processus équivalent à une instruction while avec l'API Java 8 Stream
Je veux utiliser java8 forEach avec index
Je veux ForEach un tableau avec une expression Lambda en Java
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Une histoire que j'ai eu du mal à défier le pro de la concurrence avec Java
Je veux écrire un joli build.gradle
Je veux écrire un test unitaire!
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
J'ai essayé de créer une API Web qui se connecte à DB avec Quarkus
Je souhaite créer un SNS Web sombre avec Jakarta EE 8 avec Java 11
Je souhaite envoyer un e-mail en Java.
Je veux écrire une simple répétition d'une chaîne de caractères
Je veux écrire rapidement de java vers sqlite
J'ai essayé de casser le bloc avec java (1)
Même en Java, je veux sortir true avec un == 1 && a == 2 && a == 3 (deuxième décoction Javassist)
Rails6 Je veux créer un tableau de valeurs avec une case à cocher
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (Black Magic)
J'ai essayé de créer une méthode qui applique plusieurs filtres à la fois avec l'API Java Stream. Cela vous convient-il?
Je souhaite surveiller un fichier spécifique avec WatchService
Je veux faire des transitions d'écran avec kotlin et java!
Je souhaite renvoyer un objet au format CSV avec en-tête et filtre multilignes en Java
Même en Java, je veux sortir vrai avec un == 1 && a == 2 && a == 3 (magie grise qui n'est pas tant que magie noire)
Même en Java, je veux sortir true avec un == 1 && a == 2 && a == 3 (Royal road edition qui n'est ni magique ni rien)
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai essayé de moderniser une application Java EE avec OpenShift.
[Java] Je souhaite convertir un tableau d'octets en un nombre hexadécimal
Je souhaite créer une applet Java sans utiliser d'IDE
Je veux pousser une application créée avec Rails 6 vers GitHub
Je souhaite utiliser l'API Java 8 DateTime lentement (maintenant)
Je souhaite envoyer manuellement un e-mail d'autorisation avec Devise
Implémentation d'une API forte pour "Je veux afficher ~~ à l'écran" avec un simple CQRS
[Java] Introduction à l'API Stream
Je veux renvoyer un type différent de l'élément d'entrée avec Java8 StreamAPI Reduce ()
Je veux implémenter diverses fonctions avec kotlin et java!
Convertir un tableau bidimensionnel au format csv avec l'API Java 8 Stream
Convertir un tableau potentiellement nul en flux
[Java] Je souhaite tester l'entrée standard et la sortie standard avec JUnit
Une interface fluide? -Je veux vous donner l'occasion d'écrire du bon code. 3 [Exemple de refactoring C #]
Comment gérer le type auquel j'ai pensé en écrivant un programme Java pendant 2 ans
Je veux créer un bouton avec un saut de ligne avec link_to [Note]
Je souhaite ajouter une fonction de navigation avec ruby on rails
Je veux juste écrire Java en utilisant Eclipse sur mon Mac
Je veux revenir à l'écran précédent avec kotlin et java!
Comment implémenter un travail qui utilise l'API Java dans JobScheduler
Comment déployer une application qui référence un pot local à heroku
J'ai essayé de créer une application Android avec MVC maintenant (Java)
[Java] Je veux effectuer distinctement avec la clé dans l'objet
Je veux extraire entre des chaînes de caractères avec une expression régulière
Vous souhaitez supprimer une IOException de Stream? dans ce cas
[java8] Pour comprendre l'API Stream
[Introduction à Java] À propos de l'API Stream
J'ai essayé d'interagir avec Java
J'ai essayé d'utiliser l'API Java8 Stream