随机化不同的ArrayList以获取值

时间:2015-01-23 07:50:21

标签: android list random arraylist

我搜索了相关问题,但没有找到解决方案(至少我不知道我是否正确命名)

所以,我有两个ArrayLists,我想随机化所有这些以获得一个值:

public class ListBox {

public static ArrayList listOne(){


    ArrayList<Lists> listOne = new ArrayList<>();
    listOne.add(new Item("Text One"));
    listOne.add(new Item("Text Two"));
    return listOne;

}

   public static ArrayList listTwo(){


    ArrayList<Lists> listTwo = new ArrayList<>();
    listTwo.add(new Item("Text Three"));
    listTwo.add(new Item("Text Four"));
    return listTwo;

}
 }

在其他活动中:

   public void buttonClick(View view){

  ArrayList<Lists> algumasListas = ListBox.listOne();
...

 }

这是我洗牌的地方

 public class ListMixer extends ListBox{
  public ArrayList<Lists> listas = null;

  public ListMixer(ArrayList<Lists> listas ) {
    this.listas = listas;
  }

  protected String mixList(){
    Double randomNumber = new Double(Math.random() * listas.size());

    int randomNum = randomNumber.intValue();
    Lista lista= listas.get(randomNum);

    String listaString2 = String.valueOf(lista);

  String message = ("This is your list: " + listas);

  return message;



}


}

我想要的输出将是四个listItem之一。

感谢帮助!

2 个答案:

答案 0 :(得分:0)

  1. 将数组合并为大小为N的单个数据。
  2. 选择0..N-1范围内的随机数。
  3. 按索引选择元素。

答案 1 :(得分:0)

我在您的代码中看到的第一个错误是listOne()在调用时返回对象listTwo,但它并不存在。它可能不应该编译,除非有一些时髦的全局范围变量。

以下代码应该通过将两个列表合并为一个然后从它们返回随机对象来执行您想要的操作。

public Object randomFromList(List<Object> listOne, List<Object> listTwo){
    List<Object> bigList = new ArrayList<Object>(listOne.size() + listTwo.size());
    bigList.addAll(listOne);
    bigList.addAll(listTwo);
    return bigList.get(new Random().nextInt(bigList.size()));
}

为了优化,如果你经常调用它,我会将Random()对象保存在方法之外,以避免每次进行调用时都将其实例化。