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

11

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

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

我的情况:有一个列表包含两个子列表——来自query1和query2的子列表。
我的需求:一个列表,包含query1和query2中所有的元素。
有什么想法吗?


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


3
编写一个查询,该查询将返回 SQL query1 UNION query2 - Victor Sorokin
list.addAll(em.createNativeQuery(query2).getResultList()); 这行代码将会给你一个包含 query1 和 query2 的列表,是不是很方便呢? - anubhava
在结果列表中,我有一个由对象[]组成的列表,其中包含字符串变量和一个字符串(在数据库中只有一个查询结果)。 - rustock
你是否遇到了ClassCastException,因为我期望getResultList()返回一个List<Object> - Marco Forberg
@MarcoForberg 不,程序正常运行,没有异常。 - rustock
显示剩余5条评论
3个回答

10

addAll() 方法可行。代码正确获取了两个查询的数据。


1
如果代码已经运行,那我创建新主题的目的是什么? - rustock
我想分享一个对我有效的例子: List<String[]> dataList = new ArrayList<String[]>(); dataList.addAll(getDataList(qry1)); dataList.addAll(getDataList(qry2)); - Priya Prajapati

5
我创建了一个类似的情况来测试你所说的。显然,我没有访问你特定的数据库进行查询,所以我只关注你问题中的关键点;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]

您没有得到结果的唯一原因可能是其中一个查询未返回任何内容...我建议在像我上面那样添加它们之前尝试打印出每个列表,并查看是否有一个为空。


1
尝试使用调试器运行并查看列表值。 - rustock
在调试中列表上的值与打印出来的值是相同的...你在你的机器上运行我的代码得到了不同的结果吗? - The9thPatriarch

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());

顺便说一句,这种方法也不是推荐的。通常,如果您想创建一个 n 维集合,其中 n>1,您可能应该创建另一个容器类,它包含集合和其他内容,然后创建存储该类实例的一维集合。


不。我想创建一个没有子列表的列表。我想将两个查询的列表合并为一个。 - rustock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接