直接在 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
并对其进行洗牌来分块进行。
有没有一种方法可以直接将 iterable 洗牌而不将其转换为 JAVA 中的列表?
Iterable<Object> all = Iterables.unmodifiableIterable(
Iterables.concat(boy_agents,girl_agents));
Collections.shuffle(all);
上面的 shuffle() 需要一个列表作为输入。考虑到计算速度,我不想循环创建列表。
随机播放需要随机访问。 Iterator
是对数据的抽象,允许您仅迭代和检索值。
所以不,没有办法洗牌 Iterator
。如果它来自支持(随机访问)集合,您可以在检索迭代器之前对其进行洗牌,或者您可以在收集结果时洗牌。但是在您连接两个迭代器的示例中,没有机会。
如果您不需要 "real" 洗牌(例如,第一个元素可以变成最后一个),您可以通过将 N 个元素放入 List
并对其进行洗牌来分块进行。