从列表中获取活动对象

Mat*_*wek 1 java random

让我们说:

private List<Item> items = new ArrayList<Item>();
Run Code Online (Sandbox Code Playgroud)

Item我的自定义类在哪里,它可以有两个状态(布尔值)活动(true)或不活动(false)它有boolean isActive()返回当前状态.

现在我要做的是从列表中接收随机项,(from 0 to items.size() - 1)但它必须是活动的.

我想要做的是在从列表中获取随机项目后,检查它是否有效,如果没有,重复直到我们收到活动项目,如果它处于活动状态,则返回它以便我们可以使用它.

不确定它是否正确,谢谢.

ars*_*jii 6

我在你建议的方法中遇到的问题是,在某些条件下它会变得非常低效,特别是当你Item的列表中只有很少的活动时.另一个想法是创建一个包含列表中所有活动Items 的索引的新items列表:

List<Integer> indexes = new ArrayList<Integer>(items.size());

for (int i = 0; i < items.size(); i++)
    if (items.get(i).isActive())
        indexes.add(i);
Run Code Online (Sandbox Code Playgroud)

然后你只需要一个随机元素indexes,并将引用该特定位置的Itemin items.所以你的随机主动元素就是

items.get(indexes.get((int)(Math.random() * indexes.size())))
Run Code Online (Sandbox Code Playgroud)