java - 使用 Java 8 Stream 将泛型数组列表转换为非泛型
问题描述
我有一些我正在尝试简化的旧代码:
ArrayList arr = (generic arraylist)
int[] newArr = new int[arr.size()];
for(int i=0; i<arr.size(); i++){
newArr[i]=(int)arr.get(i);
}
我想使用 Java Stream API 来简化这一点。这是我的尝试:
ArrayList arr = (generic arraylist)
List<Integer> = arr.stream().map(m -> (int)m).collect(Collectors.toList());
我的理解是它会遍历 arr,将每个对象 m 类型转换为一个 int,然后将它收集到一个 List 中。但是我的编译器说第二行的右侧返回对象而不是列表。我哪里错了?
解决方案
根据您的尝试,您似乎想将您的映射ArrayList
到ArrayList<Integer>
. 好消息是,您无需执行任何操作。的运行时类型ArrayList<Integer>
只是(如果您想搜索有关它的信息,ArrayList
这称为类型擦除)。只有编译器知道参数化类型。
所以这段代码做你想做的事:
import java.util.ArrayList;
public class Cast {
public static void main(String[] args) {
// This represents the ArrayList of Integer in your existing code
ArrayList raw = new ArrayList(java.util.Arrays.asList(
Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3)
));
// You know what it is, so all you need to do is cast
ArrayList<Integer> typed = (ArrayList<Integer>)raw;
// Still works; now recognized as list of integer
for (Integer x : typed) {
System.err.println(x);
}
}
}
推荐阅读
- java - 我是否需要为我的单个数据库中的每个表创建 jpa 存储库接口。用于对每个表进行 CRUD 操作
- android - 如何为 WIFI 和蜂窝数据设置不同的工作管理器约束
- jquery - 用户连续选择多个文件
- ansible - 在配置中替换一行的 Ansible 方法
- c# - 从 Process.Start()-Method 获取文件
- c++ - xcode在使用pthread库时没有给出输出
- jquery - Bootstrap Mega Menu 定位错误
- mysql - 在 Laravel 模型的关系中,如何使用 GROUP BY 和 MAX 返回关系?
- parallel-processing - 矩阵乘法:在 CUDA 中合并全局内存访问后性能下降
- android - 如何从反应原生打开android活动