Как использовать Java Collections.shuffle () в массиве Scala?

У меня есть массив, который я хочу перестановить случайно. В Java есть метод Collections.shuffle (), который может случайным образом перемешивать элементы списка. Он также может быть использован в массиве:

String[] array = new String[]{"a", "b", "c"};

// Shuffle the array; works because the list returned by Arrays.asList() is backed by the array
Collections.shuffle(Arrays.asList(array));

Я пытался использовать это в массиве Scala, но интерпретатор Scala отвечает длинным ответом:

scala> val a = Array("a", "b", "c")
a: Array[java.lang.String] = Array(a, b, c)

scala> java.util.Collections.shuffle(java.util.Arrays.asList(a))
<console>:6: warning: I'm seeing an array passed into a Java vararg.
I assume that the elements of this array should be passed as individual arguments to the vararg.
Therefore I follow the array with a `: _*', to mark it as a vararg argument.
If that's not what you want, compile this file with option -Xno-varargs-conversion.
       java.util.Collections.shuffle(java.util.Arrays.asList(a))
                                                             ^
<console>:6: error: type mismatch;
 found   : Array[java.lang.String]
 required: Seq[Array[java.lang.String]]
       java.util.Collections.shuffle(java.util.Arrays.asList(a))
                                                             ^

Что именно здесь происходит? Я не хочу компилировать мой код со специальным флагом (-Xno-varargs-преобразование), если это вообще решение, именно из-за этого.

Итак, как мне использовать Java Collections.shuffle () в массиве Scala?

Тем временем я написал свой собственный метод случайного воспроизведения в Scala:

// Fisher-Yates shuffle, see: http://en.wikipedia.org/wiki/Fisher–Yates_shuffle
def shuffle[T](array: Array[T]): Array[T] = {
    val rnd = new java.util.Random
    for (n <- Iterator.range(array.length - 1, 0, -1)) {
        val k = rnd.nextInt(n + 1)
        val t = array(k); array(k) = array(n); array(n) = t
    }
    return array
}

Он перемешивает массив на месте и для удобства возвращает сам массив.

Ответы на вопрос(3)

Ваш ответ на вопрос