2017-10-17 10 views
-5

J'ai une liste des résultats d'une série de votes (en forme longue), par exemple:Comment modifier les données de temps à la forme large en Java

List<String[]> results=new ArrayList<>(); 

Vote | User | Poll 
Yes | 121 | 1  //each poll is on its own line 
No | 123 | 1 
Yes | 121 | 2 

et je suis en train de récupérer mes données à large forme:

Poll1Vote | Poll2Vote | User 
Yes  | Yes  | 121 //this has all polls on one line for user 121 
No  | NULL  | 123 

Quelqu'un peut-il expliquer comment faire cela?

+0

pourrait celui qui a voté pour fermer cette expliquer pourquoi on ne sait pas ? – Rilcon42

+0

Cherchez-vous simplement un moyen de transformer ces données spécifiques (avec plus d'entrées String [3])? (Je ne suis pas un vote proche) – phflack

+0

Oui, je n'ai jamais essayé de faire des stats en Java avant et j'ai du mal à formater les données correctement – Rilcon42

Répondre

0

Voici une méthode qui reformate les données

Cela suppose que vos données sont {["Yes", "121", "1"], ...}

Vous devrez peut-être quelques ajustements mineurs si vos données sont formatées comme {["Vote", "User", "Poll"], ["Yes", "121", "1"], ...}


fonctionne cette fonction en déterminant d'abord le User et Poll ensembles

Une fois qu'il sait combien d'utilisateurs au total (longueur de la liste de sortie) et les sondages au total (sortie tableau lengths), il peut correspondre à des paires d'entre eux ensemble et de construire la sortie

List<String[]> format(List<String[]> input) 
{ 
    List<String[]> output = new ArrayList<String[]>(); 
    Set<String> users = new HashSet<String>(); 
    Set<String> pollSet = new HashSet<String>(); 
    Map<String, String> data = new HashMap<String, String>(); 

    for(String[] row : input) //figure out how many users and polls there are 
    { 
     users.add(row[1]); 
     pollSet.add(row[2]); 
     data.put(row[1] + "_" + row[2], row[0]); //link user_poll to Yes/No data 
    } 

    String[] polls = pollSet.toArray(new String[0]); //make the set be an array for easier access 
    Arrays.sort(polls); //sort the polls here if you want to 

    for(String user : users) //loop over users, since each row is 1 user 
    { 
     String[] row = new String[polls.length + 1]; //each row is poll1,poll2,...,pollN,user 
     row[row.length - 1] = user; 

     for(int i = 0; i < polls.length; i++) 
      row[i] = data.get(user + "_" + polls[i]); //retrieve the Yes/No data for user_poll, no data fills in null 
      //alternative if you want "NULL" instead of null 
      //if((row[i] = data.get(user + "_" + polls[i]) == null) 
       //row[i] = "NULL"; 

     output.add(row); //add completed row to the output 
    } 

    return output; 
}