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를 함께 정렬합니다. 내 가정이 맞다면 사용자 정의 Comparator 구현 클래스를 정렬 함수에 전달할 수 있도록 java.util.Collections.sort()을 사용하여이를 달성 할 수 있습니다. 달성 방법에 관한 한 가지 예가 아래에 나와 있습니다.

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); 
     } 
    } 
}