Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Java对象强制转换为整数列表?_Java_List_Casting - Fatal编程技术网

如何将Java对象强制转换为整数列表?

如何将Java对象强制转换为整数列表?,java,list,casting,Java,List,Casting,一些文档不完整的库的一个方法是返回一个对象列表。我知道这个列表包含整数数组列表。详情如下: List<?> result = lib.get(); Iterator<?> iterator = result.iterator(); while(iterator.hasNext()){ Object next = iterator.next(); System.out.println(next.toString()); System.out.prin

一些文档不完整的库的一个方法是返回一个对象列表。我知道这个列表包含整数数组列表。详情如下:

List<?> result = lib.get();
Iterator<?> iterator = result.iterator();
while(iterator.hasNext()){
    Object next = iterator.next();
    System.out.println(next.toString());
    System.out.println(next.getClass());
}

如何将这些对象转换为ArrayList以便正确使用它们?

我认为只能将对象下一步=…对象转换为java.util.Arrays$ArrayList类型,但由于它是一个私有静态类,最好将其转换为java.util.List

比如:

List result=lib.get();
迭代器迭代器=result.Iterator();
while(iterator.hasNext()){
Object next=iterator.next();
// -------------------
列表=(列表)下一步;
System.out.println(list.get(0));
System.out.println(list.get(1));
// -------------------
}
tl;博士 您不能强制转换整个对象,因为它是一个包含
整数
对象的
列表
。因此,循环外部列表,并将每个元素
list
对象转换为
list
对象

整数列表 您似乎有一个整数列表,而不是整数列表

    List < Object > objects = new ArrayList <> ( 3 );
    objects.add ( List.of ( 0 , 0 ) );
    objects.add ( List.of ( 0 , 1 ) );
    objects.add ( List.of ( 0 , 2 ) );

    System.out.println ( objects );
…引发异常:

线程“main”java.lang.ClassCastException中的异常:无法将类java.util.ImmutableCollections$List12强制转换为类java.util.ArrayList(java.util.ImmutableCollections$List12和java.util.ArrayList位于加载程序“引导”的模块java.base中)

我们可以将每个元素强制转换为
列表

List < Object > objects = new ArrayList <> ( 3 );
objects.add ( List.of ( 0 , 0 ) );
objects.add ( List.of ( 0 , 1 ) );
objects.add ( List.of ( 0 , 2 ) );

System.out.println ( objects );

Iterator < ? > iterator = objects.iterator ();
while ( iterator.hasNext () )
{
    Object next = iterator.next ();
    List < Integer > list = ( List < Integer > ) next;
    System.out.println ( list.get ( 0 ) );
    System.out.println ( list.get ( 1 ) );
}
我不知道有什么方法可以直接播放原始列表。下一行给出的编译器错误为
不可转换类型

List < List < Integer > > listOfListOfIntegers = ( List < List < Integer > > ) objects;
List>listofListFinTegers=(List)对象;

假设您有一个整数列表,您只需

List<List<Integer>> newList = result.stream()
                             .map(e->(List<Integer>)e)
                             .collect(Collectors.toList());
List newList=result.stream()
.地图(e->(列表)e)
.collect(Collectors.toList());

只需将
lib.get()
返回的值强制转换为
List


强制转换并忽略警告?看起来您有一个整数数组列表,而不是整数列表。@BasilBourque不能是整数数组列表,因为整数数组的toString不会打印其内容。也许是一份integers@ShashwatKhanna,输出显示它是通过调用
java.util.arrays.asList(…)
包装的数组集合。并不是说它在这里有什么特殊用途。它的工作原理是将它转换为
(List)
。如果我将其转换为ArrayList,则会引发异常
java.lang.ClassCastException:java.util.Arrays$ArrayList不能转换为java.util.ArrayList
@ZzKr我想您只需要导入正确的
ArrayList
。@ZzKr是的。ArrayList是java.util.Arrays中的一个私有静态类。因为它实现了java.util.List接口,所以您可以将其强制转换为List。无需强制转换每个子列表,您可以一次性转换整个列表并完成它,请参见。Ihr看起来像OP问题中的列表是由
数组创建的。asList()
,而不是
List.of()
。您应该能够强制转换到
数组
”内部类
数组列表
(尽管我不知道您为什么要转换)。@daniu是的,我想您可以这样假设。但这将是一次黑客攻击。但是数据发布者可以随时更改为
List
的另一个实现,从而破坏您的代码。除非有某种原因,否则我不会费心去处理
List
这个接口证明是不够的。@BasilBourque感谢您提出的关于将其转换为混凝土类的观点。我更新了我的答案。不需要强制转换每个单独的子列表,也不需要强制转换为实际的列表类型,假设您只读取值,而不更新列表。您可以强制转换整个内容,请参见。编译器错误:
List::get
需要一个
int
参数。“实际参数列表和形式参数列表长度不同”@BasilBourque我只是将代码复制/粘贴回Eclipse,并在Java8和Java11上编译和执行它。我还从命令行编译和执行。没有编译器错误,输出如图所示。
List < Object > objects = new ArrayList <> ( 3 );
objects.add ( List.of ( 0 , 0 ) );
objects.add ( List.of ( 0 , 1 ) );
objects.add ( List.of ( 0 , 2 ) );

System.out.println ( objects );

Iterator < ? > iterator = objects.iterator ();
while ( iterator.hasNext () )
{
    Object next = iterator.next ();
    List < Integer > list = ( List < Integer > ) next;
    System.out.println ( list.get ( 0 ) );
    System.out.println ( list.get ( 1 ) );
}
List < List < Integer > > listOfListOfIntegers = ( List < List < Integer > > ) objects;
List<List<Integer>> newList = result.stream()
                             .map(e->(List<Integer>)e)
                             .collect(Collectors.toList());
@SuppressWarnings("unchecked")
List<List<Integer>> result = (List<List<Integer>>) lib.get();
// Simulate lib.get() and prove that it is same as question code
List<?> result = Arrays.asList(Arrays.asList(0, 0),
                               Arrays.asList(0, 1),
                               Arrays.asList(0, 2));
for (Object next : result) {
    System.out.println(next);
    System.out.println(next.getClass());
}

// Fix it
@SuppressWarnings("unchecked")
List<List<Integer>> fixedResult = (List<List<Integer>>) result;

// Print the fixed result
for (List<Integer> list : fixedResult) {
    for (int value : list)
        System.out.print(value + " ");
    System.out.println();
}