2016-08-27 7 views
-1

[1a,1b,2a,2b,3a,3b, etc.]の形式で格納されており、シャッフルして#a#bが一緒になるようにしたいと思います。私は#a#bの両方を保持しているオブジェクトを作って、それらのオブジェクトのうちのLinkedListをシャッフルすることができることを知っていますが、もっと便利な方法があるのだろうかと思っていました。構造体を維持しながらリンクされたリストをシャッフルする

ありがとうございました!

+1

手作業でもっと不便な方法があります。 – Kayaman

+0

あなたの質問には、具体的にどのような期待結果が具体的に追加してください。 –

+2

いいえ、あなたが提案したものが最も便利な方法です。 ['Collections.shuffle()'](https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#shuffle-java.util.List-)を使用する場合は、 (*最も便利な方法では) '1a'と' 1b'を一緒に保ちたいとしたら、値を一緒に保持し、それらのオブジェクトをシャッフルする必要があります。 – Andreas

答えて

0

Java 8ストリームを使用するのが最も便利な方法です。

例コードは、shuffle()の効果を確認するために10回実行されます。

List<String> input = Arrays.asList("1a","1b","2a","2b","3a","3b"); 
for (int i = 0; i < 10; i++) { 
    List<List<String>> tmp = new ArrayList<>(input.stream() 
      .collect(Collectors.groupingBy(s -> s.substring(0,1))) 
      .values()); 
    Collections.shuffle(tmp); 
    LinkedList<String> output = tmp.stream() 
      .flatMap(List::stream) 
      .collect(Collectors.toCollection(LinkedList::new)); 
    System.out.println("\t" + output); 
} 

出力

[1a, 1b, 2a, 2b, 3a, 3b] 
[2a, 2b, 3a, 3b, 1a, 1b] 
[3a, 3b, 1a, 1b, 2a, 2b] 
[1a, 1b, 2a, 2b, 3a, 3b] 
[3a, 3b, 1a, 1b, 2a, 2b] 
[1a, 1b, 2a, 2b, 3a, 3b] 
[2a, 2b, 3a, 3b, 1a, 1b] 
[3a, 3b, 2a, 2b, 1a, 1b] 
[1a, 1b, 2a, 2b, 3a, 3b] 
[1a, 1b, 3a, 3b, 2a, 2b] 
0

はい、あります。単語 "シャッフル"を使用して、実際にエントリ#aと#bを並べ替えることができます。私の前提が正しければ、java.util.Collections.sort()を使用して達成することができます。これにより、カスタマイズされたComparator実装クラスをソート関数に渡すことができます。 これを実現する方法の例を以下に示します。

class LinkedListSort{ 

    public static void main(String[] args) 
    { 
     LinkedList<String> list = new LinkedList<String>(); 
     String linkedListDataString = "1a,1b,2a,2b,3a,3b"; 
     for(String str : linkedListDataString.split(",")) { 
      list.add(str); 
     } 

     Collections.sort(list, new Comparator<String>() { 
      @Override 
      public int compare(String object1, String object2) { 
       String suffix1 = object1.substring(object1.length()-1); 
       String suffix2 = object2.substring(object2.length()-1); 

       return Collator.getInstance().compare(suffix1,suffix2); 
      } 
     }); 
     System.out.println("Sorted list entries: "); 
     for(String e:list) { 
     System.out.println(e); 
     } 
    } 
} 
関連する問題