0
votes

Java Stream décharge de la ligne de commande dans les commandes

J'ai un flux de lignes de calcul xxx

maintenant je veux chunk / map / groupez-les dans un flux comme xxx maintenant maintenant Je peux traiter chaque élément dans le flux comme ordre. Je veux lire chaque élément dans le flux "ordre" comme unité de commande

Comment puis-je diffuser des lignes -> Commandes?

  • Je ne veux pas collecter tout le flux de "lignes" avant de voir "commandes"
  • Je ne veux pas voir une carte
  • Je m'en fiche de cet ordre "100" pourrait revenir à nouveau un 100.000 éléments plus tard .. parce que cela ne se produit pas

    -

    • J'ai lu / essayé beaucoup de groupements et d'articles super intéressants sur "foo" et cela.
    • J'ai besoin de bien réussir.
    • Dans l'échantillon I Afficher la ligne de commande en tant que chaîne "100-2" pour le garder simple. Ce sont des objets réels avec un champ de numéro de commande, un champ de ligne de commande, etc. avec getters.

3 commentaires

Vous voulez donc grouper par préfixe 100-, 120-?


Je ne veux pas collecter l'ensemble du flux de "lignes" avant de voir "commandes" sonne comme si vous avez besoin d'une base de données afin que vous puissiez sélectionner des commandes. Les flux sont utilisés pour la collecte et la manipulation d'informations en vue de leur processus ou d'examen. ce.


regrouper java8 flux sans le collecter Java Split Stream en prédicat dans le flux de flux


3 Réponses :


1
votes

Que diriez-vous de quelque chose comme ça. Chaque valeur map est une liste. La clé est la valeur à gauche du tableau de bord - code>. xxx pré>

impression p> xxx pré>

afin que vous puissiez fais cela. p> xxx pré>

impression p> xxx pré>

Si vous ne voulez pas traiter une carte mais que je veux juste des listes de Listes de commandes Vous pouvez obtenir ceci depuis la carte. P>

List<List<String>> lists = 
         orders.values().stream().collect(Collectors.toList());


2 commentaires

Le problème de la production d'une carte est que l'ensemble du flux "LIGNE" est traité à la fin avant le flux "ordre". Cela signifie que la solution est de la mémoire lourd - et non de streaming.


Si vous allez les garder dans des structures de données, cela peut en effet être une mémoire lourde. Traitement des données telles que la lecture d'un fichier ou d'une approche similaire pourrait aider. En utilisant également une approche plus conventionnelle avec des boucles et rédiger de manière intermittenante les listes sur des fichiers séparés qui sont nommés pour refléter leur contenu pourraient fonctionner,



0
votes

Vous pouvez créer une carte de votre entrée, puis collecter uniquement les valeurs de la carte xxx


2 commentaires

La réponse fonctionne - mais a eu un problème - il fonctionnera par toutes les lignes avant de servir des commandes


c'est vrai qui est nécessaire pour trouver des préfixes uniques, mais le mappage fonctionnera également en parallèle et sur exécuteur exécutante



0
votes

J'ai trouvé une réponse de travail en utilisant deux solutions différentes Les critères sont

  1. Je ne veux pas collecter tout le flux de "lignes" avant de voir "commandes"
  2. Je ne veux pas voir une carte
  3. J'utilise le fait que le flux de lignes est trié par ordre (de la base de données)

    La première réponse est qu'il s'agit d'un problème de colonne. Il est possible de faire une fonction qui regroupe toutes les «lignes» appartenant à la même commande »- Bingo ..

    mais, FONCTION PLATMAP Vous avez un problème - dernière "ligne" ne se transformera jamais en groupe car le flux sera fermé avant < EM> FONCTION PLATMAP a une chance d'envoyer le dernier élément. Cela peut être travaillé en ajoutant une ligne EOS à l'aide de Concat de flux.

    mais mais il est difficile d'expliquer pour les autres développeurs. La solution à manquer le dernier élément est beaucoup mieux résolue en modifiant la manière dont le flux lit le prochain élément suivant et poser une question est un élément suivant.

    La solution doit changer le flux nous pouvons également obtenir le dernier élément manipulé également.

    Ma solution finale consiste à fabriquer son propre flux et gérer le itérateur

    Le test ressemble à ceci xxx

    Sortie:

    • groupé [100-1, 100-3, 100-4]
    • groupé [120-1, 120-2]
    • groupé [133-1]

      J'ai fait une classe appelée groupes de groupes . Cette classe fait un nouveau flux (où les éléments sont regroupés dans une liste). Un flux source est lu à l'intérieur de la classe.

      Les parties lourdes sont:

      • Faites de l'itérateur Hasnext () Travail
      • Faites le prochain () de l'itérateur
      • comprendre comment créer un nouveau flux.

        La classe Java ressemble à ceci xxx


0 commentaires