2017-09-27 3 views
-2

je produis des listes basées sur la carte,Générer des numéros de séquence unique java

 Map<String, List<Integer>> map = new HashMap<String, List<Integer>>(); 

code complet est ici: https://repl.it/L3cv/0

Résultat du code:

 list1: [account_number, account_number, account_number, account_number, Amount, Amount, Amount, Amount] 
     list2: [1, 2, 3, 4, 100, 400, 500, 700] 

Résultat souhaité: (génère uniques séquence/id basé sur list2)

 list3: [1, 2, 3, 4, 1, 2, 3, 4] 

Dans le code, j'ai essayé d'ajouter « sequence_number », mais il donne juste la valeur ajoutée [1,2,3,4,5,6,7,8]

 sequence_number = 0; 
     for (final Integer val : value) { 
      sequence_number++; 
      list3.add(key); 
      list4.add(val); 
     } 

mais cela ne donne pas moi le résultat souhaité. Comment faire?

Répondre

1

Je ne suis pas sûr à 100% quel problème vous essayons de résoudre. C'est ce que je pense que vous essayez d'atteindre.

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import java.util.Map.Entry; 

class Main { 
    public static void main(String[] args) { 
    List<Integer> list1 = new ArrayList<Integer>(); 
    list1.add(1); 
    list1.add(2); 
    list1.add(3); 
    list1.add(4); 
    List<Integer> list2 = new ArrayList<Integer>(); 
    list2.add(100); 
    list2.add(400); 
    list2.add(500); 
    list2.add(700); 

    Map<String, List<Integer>> map = new HashMap<String, List<Integer>>(); 
    map.put ("account_number", list1); 
    map.put ("Amount", list2); 

    System.out.println(map); 

    List<String> list3 = new ArrayList<String>(); 
    List<Integer> list4 = new ArrayList<Integer>(); 

    String lastkey = null; 
    int sequence = 0; 
    for (final Entry<String, List<Integer>> entry : map.entrySet()) { 
     final String key = entry.getKey(); 
     final List<Integer> value = entry.getValue(); 

     for (final Integer val : value) { 
      list3.add(key); 
      if(lastkey == null||lastkey!=key){ 
       sequence = 1; 
       lastkey = key; 
      } 
      list4.add(sequence++); 
     } 
    } 

    System.out.println(list3); 
    System.out.println(list4); 
    } 
} 
1

Il existe deux solutions possibles, en fonction de votre réponse à cette question:

« La première liste contient toujours des paires d'éléments moyens, il a toujours un nombre pair d'entrées, donc s'il y a 12 entrées , vous attendez 1,2,3,4,5,6,1,2,3,4,5,6? "

Si oui, votre solution va comme ceci:

int halflist = list1.size()/2; 
int sequencenumber = 0; 
for (...) { 
    sequencenumber++; 
    // add your stuff 
    if (sequencenumber == halflist) sequencenumber = 0; 
} 

Cela augmentera la valeur 1,2,3,4,1,2,3,4. Cela pourrait être fait avec du code modulo et plus de fantaisie, mais l'incrément simple ici devrait le rendre compréhensible.

  • Si non, veuillez fournir plus de détails, ce que vous voulez réaliser.
+0

Merci pour la solution, cela est utile aussi bien mais son ajout de 0 comme [2,3,4,0,2,3,4,0] – Maddy

+0

Non, je ne pense pas. Il commence par zéro, mais s'incrémente en tant que première ligne dans la boucle for .... Donc, la première valeur est 1. La dernière ligne de la boucle for est l'instruction if ... qui se réinitialise à zéro (et s'incrémente à nouveau en première ligne de l'itération suivante). Avez-vous les lignes dans l'ordre exact ci-dessus? – Grisgram

0

Résultat souhaité: (génération de séquence unique/id basée sur liste2)

Vouliez-vous dire list1? Parce que l'exemple que vous avez donné - [1, 2, 3, 4, 1, 2, 3, 4], est de list1.

Ensuite, si vous voulez redémarrer la séquence ID-compteur sur la taille de list1, vous pouvez utiliser % -operator:

for (final Entry<String, List<Integer>> entry : map.entrySet()) { 
     final String key = entry.getKey(); 
     final List<Integer> value = entry.getValue(); 
     for (int i = 0; i < value.size(); i++) { //<<< We need an index. 
      list3.add(key); 
      list4.add(list1.get(i % list1.size())); //<<< Change this! 
     } 
    } 

Your code-link, edited with changes.