当前位置: 首页 > 知识库问答 >
问题:

Java list转换为list问题?

桂高昂
2023-03-14
public static void main(String[] args) {
   List<Integer> list = new ArrayList<>(2);
   list.add(12);
   list.add(13);

   // can not cast
   List<BigInteger> coverList = (List<BigInteger>)list;
}
public static void main(String[] args) {
   List<Integer> list = new ArrayList<>(2);
   list.add(12);
   list.add(13);

   Map<String, Object> map = new HashMap<>(1);
   map.put("list", list);
   List<BigInteger> coverList = (List<BigInteger>) map.get("list");

   System.out.println(coverList.size());
}

共有1个答案

祁嘉言
2023-03-14

不能将列表 强制转换为列表 。相反,您必须将每个整数映射到新的列表中的biginteger。在Java8+中,最简单的方法是使用stream()map函数。就像,

List<BigInteger> coverList = list.stream()
        .map(i -> BigInteger.valueOf(i))
        .collect(Collectors.toList());

至于第二个示例工作的原因,类型擦除导致所有泛型类型在运行时都为Object。请注意,它还添加了一个桥接方法;因此,一旦访问列表中的值,当前代码将在运行时失败。

例如,

List<Integer> list = new ArrayList<>(2);
list.add(12);
list.add(13);

Map<String, Object> map = new HashMap<>(1);
map.put("list", list);
List<BigInteger> coverList = (List<BigInteger>) map.get("list");
List<BigInteger> coverList2 = list.stream().map(i -> BigInteger.valueOf(i)).collect(Collectors.toList());
System.out.println(coverList.get(0));
BigInteger bi = coverList.get(0);
System.out.println(bi);
12
Exception in thread "main" java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.math.BigInteger (java.lang.Integer and java.math.BigInteger are in module java.base of loader 'bootstrap')
 类似资料:
  • 我有一个方法createCompliance响应(),它返回BOLConplationObject对象,在此之前,我将其更改为BOLConplationMono,因为我必须在其中调用另一个反应性服务。但是在这样做之后,我调用该服务的当前服务在第6行和第7行出现错误。 我为其更改了退货类型的另一项服务是

  • 我在MongoDB中使用Java驱动程序3.0,以便通过Web服务发送JSON。 当我想将文档对象(org.bson.文档)转换为JSON时,我使用,当我想将JSON转换为文档对象时,我使用。 但是,当我处理文档列表时(如JSON中所示:

  • 到目前为止,我在这里找到了一些答案,但每次都会出现无法从对象转换为字符串的错误,等等。例如,我现在使用了这个想法: 我有以下与我的数据库映射的对象列表:

  • 我有我想分批处理的编号列表。

  • 我在我的项目中使用spring webflux与外部API进行通信。在我的项目中,我无法将Flux转换为List。 在尝试对collectList().block()执行同样的操作时,flux的所有元素都被连接到一个字符串中,并存储在List的第0个索引处。如果我返回Flux而不是List,那么它会发送预期的响应。但我需要操作内容并将其作为子对象添加到其他对象中&因此尝试返回列表。 预期结果:[“

  • 此API调用返回一个可能较大的列表 排序、搜索和访问一个潜在的大型LinkedList将非常缓慢,对我的程序来说是不可接受的。因此,我需要将列表转换为ArrayList,以确保程序的实际效率。但是,由于列表很可能已经是ArrayList,因此不必要地创建列表的新ArrayList副本将效率低下。 考虑到这些约束,我提出了以下方法将列表转换为ArrayList: 我的问题是:这是处理具有未知实现的列