은 [1a,1b,2a,2b,3a,3b, etc.]
양식으로 저장되어 있으므로 셔플하고 싶습니다. #a
과 #b
이 함께 있어야합니다. #a
과 #b
을 모두 가지고있는 객체를 만들 수 있고 그 객체의 LinkedList
을 임의로 뒤섞을 수 있지만 더 편리한 방법이 있는지 궁금합니다.구조체를 유지하면서 링크드 목록을 섞기
도움 주셔서 감사합니다.
은 [1a,1b,2a,2b,3a,3b, etc.]
양식으로 저장되어 있으므로 셔플하고 싶습니다. #a
과 #b
이 함께 있어야합니다. #a
과 #b
을 모두 가지고있는 객체를 만들 수 있고 그 객체의 LinkedList
을 임의로 뒤섞을 수 있지만 더 편리한 방법이 있는지 궁금합니다.구조체를 유지하면서 링크드 목록을 섞기
도움 주셔서 감사합니다.
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]
예있다. "셔플"이란 단어를 사용하여 실제로 항목 #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);
}
}
}
수동으로 처리하는 데 더 불편한 방법이 있습니다. – Kayaman
귀하의 질문에 어떤 내용을 추가 하시겠습니까? –
아니오, 귀하가 제안한 것이 가장 편리한 방법입니다. ['Collections.shuffle()'] (https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#shuffle-java.util.List-)을 사용하려는 경우, (* 가장 편리한 방법으로) '1a'와 '1b'를 함께 유지하기를 원한다면, 함께 유지할 값의 객체가 필요하며, 그 객체들을 섞는다. – Andreas