Java - 数组名称等于字符串变量的值

时间:2016-01-09 05:48:50

标签: java arrays string variables arraylist

我有10个数组列表和一个String变量。 我有一个函数/方法,允许用户选择要添加的阵列列表之一。目前,该函数将“selected”字符串的值更改为正确的数组列表名称的值。

启动另一个功能,即向arraylist添加元素。但是,我正在努力想出一个解决方案,根据用户选择的内容来改变添加哪个arraylist。

此代码不起作用,但说它是:

function get_topic_per_category($num,$start,$cat)
{
     $offset = $this->uri->segment(4);
     $this->db->select('ft.*,', FALSE);
     $this->db->select('IFNULL(COUNT(fc.topic_sk),0) as count', FALSE);
     $this->db->from('forum_topic as ft');
     $this->db->join("forum_comment as fc", ' fc.topic_sk = ft.topic_sk','left');
     $this->db->group_by('ft.topic_sk');
     $this->db->order_by('pinned',"DESC");
     $this->db->order_by("date_posted","DESC");
     $this->db->limit($num,$offset);
     $query= $this->db->get();
     return $query->result();
}

通常你可以输入arrayList名称并添加.add(whateverTheUserIsEntering)并且它可以正常工作。

那么我如何才能使arrayList的名称等于String变量的值呢?

2 个答案:

答案 0 :(得分:1)

以下是使用Map将字符串名称绑定到列表的示例。当你需要在运行时将事物放在一起时(与编译时相反,正如你用示例choosen.add(userEntered)所示),你通常需要使用Map。

这适用于从文件读取的字符串(比如将XML名称绑定到对象)或解释器之类的东西,您必须按名称跟踪用户变量。

public class SymbolTableExample
{
   public static void main(String[] args) {
      // Some array lists
      ArrayList<String> cats = new ArrayList<>();
      ArrayList<String> dogs = new ArrayList<>();
      ArrayList<String> beetles = new ArrayList<>();
      ArrayList<String> cows = new ArrayList<>();

      // Bind names to them
      Map<String,List<String>> binding = new HashMap<>();
      binding.put( "cats", cats );
      binding.put( "dogs", dogs );
      binding.put( "beetles", beetles );
      binding.put( "cows", cows );

      // Pretend the user enters some input here
      String userChoice = "cats";
      String userEntered = "flufy";
      binding.get( userChoice ).add( userEntered );

   }
}

答案 1 :(得分:0)

使用Map

public interface Map<K,V>

您可以使用方法

V put(K key, V value)

为键指定值,因此您可以为不同的键设置ArrayList或添加新键。

由于您使用的是ArrayList,因此您可以按照以下方式制作地图:

Map<String, ArrayList<String>)> myArrays

然后,要使用给定键向数组添加值,请使用

myArrays.get(userChosenArrayKey).add(whatUserEntered)