1

我创建了一个对象,其中包含针对数据库运行的查询的所有结果。然后将这些结果存储在一个数组中。

我正在尝试将此数组转换为 ArrayList 以便可用于导入文档。

我努力了:

//trustSummary is the name of my array
ArrayList data = new ArrayList(Arrays.asList(trustSummary));

ClassCastException但是,当我尝试在应用程序的另一部分运行以下代码时,这似乎会导致问题 ( )。任何人都可以指出正确的方向来解决这个问题。

for (Iterator rows = data.iterator(); rows.hasNext();)
   ArrayList row = (ArrayList) rows.next();
4

3 回答 3

2

ArrayList(Collection)您在此处编写的部分中使用的构造函数使用源集合中的元素new ArrayList(Arrays.asList(trustSummary));创建一个ArrayList,它不会ArrayList使用另一个集合作为元素创建一个。

因此,您需要修复该行或更改该行

ArrayList row = (ArrayList) rows.next();

TrustSummary ts = (TrustSummary) rows.next();

一般来说,我会建议使用泛型,以避免对集合类型的那种混淆。

在您的情况下,例如

List<TrustSummary> summaries = new ArrayList<TrustSummary>(Arrays.asList(trustSummary));
于 2013-02-14T13:28:27.563 回答
0

您的代码仅在以下情况下才有效trustSummary

ArrayList[] trustSummary;

或:(虽然这并没有真正的意义,因为这样数组将只有 1 个元素,因此您也可以直接使用该元素)

ArrayList trustSummary;

以上两种方法都有效,因为Arrays.asList将数组或数组中所需的一堆项目作为参数。

trustSummary 需要像上面那样定义的原因(ArrayList作为元素)是因为迭代器一次抓取一个元素data(从数组转换而来)(所以返回类型next()是数组中使用的类型(ArrayList在这个案例))。

这会起作用:

String[] trustSummary = {"1", "2", "3"};
ArrayList<String> data = new ArrayList<String>(Arrays.asList(trustSummary));
for (Iterator rows = data.iterator(); rows.hasNext();)
  System.out.println((String)rows.next());

或这个:

String trustSummary = "1";
ArrayList<String> data = new ArrayList<String>(Arrays.asList(trustSummary));
for (Iterator rows = data.iterator(); rows.hasNext();)
  System.out.println((String)rows.next());

替换String为所需的类型并适当更改。

于 2013-02-14T13:25:11.417 回答
-1
for (Iterator rows = data.iterator(); rows.hasNext();) 
{
    Map.Entry entry = (Map.Entry) rows.next();
    ArrayList row = (ArrayList) entry.getValue(); 
}
于 2013-02-14T13:15:10.457 回答