如何将列表元素添加到另一个列表?

时间:2013-06-12 12:21:26

标签: java sql list collections

我有两个sql查询,它返回列表。我的代码:

List<String> list = em.createNativeQuery(query1).getResultList();
list.addAll(em.createNativeQuery(query2).getResultList());

我拥有:列出两个子列表 - 来自query1的子列表和来自query2的子列表。
我需要的:一个包含来自query1和query2的所有元素的列表。
有什么想法吗?


问题出现在第一次sql查询中。结果是在对象数组中添加,因此addAll方法无法解决我的问题。

3 个答案:

答案 0 :(得分:8)

addAll()将起作用。从查询

获取数据的代码是正确的

答案 1 :(得分:2)

我创建了一个类似的情况来测试你在说什么。显然我无法访问您的特定数据库进行查询,因此我只关注您的问题; List组合。

List<String> foods = new ArrayList<String>(); //this is analogous with the list returned from your first query
foods.add("Beef");
foods.add("Chicken");
System.out.println("foods(query1):  "+foods);

List<String> fruits = new ArrayList<String>(); //this is analogous with the list returned from your second query
fruits.add("Apple");
fruits.add("Peach");
fruits.add("Pear");
System.out.println("fruits(query2):  "+fruits);


foods.addAll(fruits); //this combines the two lists (your two queries)
System.out.println("foods(after combination of queries):  "+foods);

输出结果为:

foods(query1):  [Beef, Chicken]
fruits(query2):  [Apple, Peach, Pear]
foods(after combination of queries):  [Beef, Chicken, Apple, Peach, Pear]

我唯一的想法是,为什么你没有得到那个结果将是你的一个查询没有返回任何东西......我建议尝试打印出每个列表,然后将它们添加到一起,如上所述,看看是否一个是空的。

答案 2 :(得分:0)

您实际上想要创建列表列表,即:

List<List<String>> listOfLists = ...;

您不能将字符串和字符串列表存储在以这种方式定义的同一列表中。如果你确实想要这样做,你应该只定义List<Object>,你就可以存储任何类型的元素。但是,强烈建议不要这样做。已经在java中引入了泛型以防止在编译时使用这种用法。

那么,您可能真正想要的是创建字符串列表列表,然后执行返回字符串列表的查询并将结果添加到第一个列表中:

List<List<String>> list = new LinkedList<List<String>>();
list.addAll(em.createNativeQuery(query1).getResultList());
list.addAll(em.createNativeQuery(query1).getResultList());

BTW也不建议使用这种方法。通常,如果你想创建n> 1的n维集合,你可能应该创建另一个包含集合和其他东西的容器类,然后创建一个存储该类实例的一维集合。