2016-10-10 38 views
1

我有一个名为say,“mylist”的java对象的ArrayList。 我从数据库中获取列表(mylist)的名称,它以String形式出现。我需要在JAVA中找到这个列表的大小,并且需要遍历它。查找ArrayList的大小,其中列表名称作为字符串传递

有没有办法做到这一点?

编辑: 更清楚在这里,我有一个类“候选”

class Candidate { 

    String firstName; 
    String lastName; 
    List<Education>educationRecords; 
    ..... 
} 

class Education { 

    String school; 
    String degree; 
    ..... 
} 

我需要从一个JSONObject其结构是从候选对象非常不同的(所以不能用填充候选对象吉森或杰克逊)。

像名字,姓氏,学校和学位简单的字段存储在数据库中。

我去取Listfields并在它们之间迭代设置候选对象。为了设置firstName,lastName,我使用SpEL。

但是,对于像学校和学位领域,它变得复杂,因为我需要知道的JSONObject的教育记录的大小。

所以,如果学校领域是存在于教育类(使用反射)迭代所有领域,我想是什么,我需要检查是否educationRecords是候选人类的List类型,然后通过一些逻辑X(以educationRecords作为变量名)迭代它。

这是我错过的逻辑“X”。

+0

1.你的要求很不明确,你需要包括更多关于你的情况的具体细节。 2.我的第一个想法是,你可能没有采取最好的方法,无论如何,从根本上说,这是一件很奇怪的事情。你可能想坐下来重新思考你的总体设计。 3.如果你按照你现在这样做的方式被锁定,请查看[关于反射的官方教程](https://docs.oracle.com/javase/tutorial/reflect/)。它有其局限性,但可能对您有所帮助。你也可以用switch语句来破解它。 –

+0

我不确定我的理解 - 你有一个'ArrayList',你想找到它的大小,即元素的数量?你为什么不使用'mylist.size()'? –

+0

@TomášM。问题如问:OP有名称的ArrayList变量。 OP从数据库中获取一个字符串。 OP然后想要访问其变量名称等于检索到的字符串的ArrayList。但没有足够的上下文来正确回答。也许是一个Map 或一个大开关块,或反射或重新设计。 –

回答

1

我不太明白这里的用例。但是,我的理解是,您有一个ArrayList<Object> mylist,您需要根据从数据库中检索的字符串找到它的大小。

您可以将列表存储在缓存中,其中关键的是列表的名称和值是实际的对象。您可以使用redis,eh-cache或memcache(或任何类似的)来实现相同的功能。

所以,当你从数据库中检索名称,获得从缓存中相应的对象和类型后做的对象大小()铸造它。如果您在缓存中存储列表类型而不是对象类型,则不需要最后一部分(类型转换)。

+1

这可能是比反射,bean属性等更好的方法,因为它隐式地从db中清理字符串。这也更直接。 –

0

可以使用地图:

Map<String, List> listMap = new Hashmap<>(); 

每次创建一个列表的时间 - 它的关键是你的列表的名称添加到您的地图。一旦你得到了一个名字,你就可以很容易地检查这个列表是否存在于你的地图中,获取它,检查它的大小并遍历它。......一旦你完成了你的列表,你应该从地图中删除它,以及否则你会保持他们周围,它会吃掉你的记忆。

相关问题