直接在 Java 中随机播放 iterable

Directly shuffle iterable in Java

有没有一种方法可以直接将 iterable 洗牌而不将其转换为 JAVA 中的列表?

        Iterable<Object> all =  Iterables.unmodifiableIterable(
                Iterables.concat(boy_agents,girl_agents));
        Collections.shuffle(all);

上面的 shuffle() 需要一个列表作为输入。考虑到计算速度,我不想循环创建列表。

随机播放需要随机访问。 Iterator 是对数据的抽象,允许您仅迭代和检索值。

所以不,没有办法洗牌 Iterator。如果它来自支持(随机访问)集合,您可以在检索迭代器之前对其进行洗牌,或者您可以在收集结果时洗牌。但是在您连接两个迭代器的示例中,没有机会。

如果您不需要 "real" 洗牌(例如,第一个元素可以变成最后一个),您可以通过将 N 个元素放入 List 并对其进行洗牌来分块进行。