2014-04-02 6 views
5

Ich habe eine Arraylist enthält einige Werte, die in einer Reihenfolge sind (richtige Positionen), jetzt möchte ich wischen/set/manuelle shuffle ändern Sie die Werte in Unordnung der Arraylist. Unteres Bild kann meine Idee geben. Ändern Sie Array-II zu Array-I. Zum Mischen können wir collection.shuffle() verwenden, aber hier habe ich eine Textdatei, in dieser Textdatei habe ich eine Originalposition sowie die aktuelle Position der Daten im Array in die Textdatei geschrieben. zB Bildgebung, haben wir eine Textdatei Name MyFile.txt, I-Daten, dass wie dies schrieb, "original_position ~ current_position" zum Beispiel 0 ~ 0 1 ~ 2 2 ~ 4 3 ~ 3 4 ~ 1 Also würde ich basierend auf den obigen Daten das Array mischen/setzen.Wie man die Array-Liste manuell mischen

Antwort

2

Hier fand ich Lösung zu meiner Frage bitte Beobachter hier. "itemList_dump" ist eine Arraylist, die Daten enthält.

if (i < itemList_dump.size()) { 

    MyBitamp Data = itemList_dump.get(original_position_val); 
      // setting Values according to our algorithm 
        Data.setItemCurPos(original_position_val); 
        Data.setItemPosition(current_positon_val); 
        Data.setrotation(rotataion_val); 

       } 
      } 
      Collections.sort(itemList_dump, new Comparator<MyBitamp>() { 

       @Override 
       public int compare(MyBitamp o1, MyBitamp o2) { 
        if (o1.getItemPosition() > o2.getItemPosition()) { 
         return 1; 
        } else if (o1.getItemPosition() < o2.getItemPosition()) { 
         return -1; 
        } else { 
         return 0; 
        } 
       } 
      }); 
4

Collections.shuffle() wird es für Sie tun. Collections.sort() wird es in der natürlichen Reihenfolge sortieren (A, B, C, D, E ..), wenn Sie möchten, dass es sortiert wird.

7

Verwenden Sie Collections.shuffle(YOUR_ARRAY_LIST);, um es zu tun.

List<String> ranList = new ArrayList<String>(); 
    // populate the list 
    ranList.add("A"); 
    ranList.add("B"); 
    ranList.add("C"); 
    System.out.println("Initial collection: " + ranList); 
    // shuffle the list 
    Collections.shuffle(ranList); 
    System.out.println("Final collection after shuffle: " + ranList); 

Die Art und Weise des Ansatzes für die manuelle Sortierung geht so:

lesen und Ihre Daten aus der Datei zu Map

private static Map<String, String> readFile(String fileNameWithPath) throws Exception { 
    Map<String, String> map = new LinkedHashMap<String, String>(); 
    File file = new File(fileNameWithPath); 
    BufferedReader bufferedReader = new BufferedReader(new FileReader(file)); 
    String sCurrentLine; 
    String[] splitPosition; 
    while ((sCurrentLine = bufferedReader.readLine()) != null) { 
     splitPosition = sCurrentLine.split("~"); 
     map.put(splitPosition[0], splitPosition[1]); 
    } 
    return map; 
} 

Und Ihre Hauptmethode ist wie hinzufügen:

try { 
     List<String> list = new ArrayList<String>(); 
     List<String> customeRandomList = new LinkedList<String>(); 
     list.add("A"); 
     list.add("B"); 
     list.add("C"); 
     list.add("D"); 
     list.add("E"); 
     Map<String, String> map = Test.readFile("D://RandomList.txt"); 
     for (Map.Entry<String, String> entry : map.entrySet()) { 
      customeRandomList.add(list.get(Integer.parseInt(entry.getValue()))); 
     } 
     for (String result : customeRandomList) { 
      System.out.println(result); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
+0

so einfach sein könnte, ich weiß, aber hier senario anders, ich habe Daten in der Textdatei, die Textdatei enthält, original_position sowie current_position des Arrays, basierend auf, dass Ich mag würde zu Setzen Sie die Daten in Array-II. d. h. manuelles Shuffle. – user3285681

+0

Ist Ihre manuelle Shuffle immer gleich? Als solche sollte die 0,1,2,3,4 immer zu 0,2,4,3,1 – ashokramcse

+0

shuffle sein Könnten Sie bitte diese Beispieldatei offen legen. – ashokramcse

Verwandte Themen