前言
说起遍历数组可能稍微有点java基础的人都会。
int [] arr =new int[]{1,3,5,7,9};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr);
}
稍微高端点的玩家可能转化为ArrayList然后再遍历
List<Integer> ints = Arrays.asList(1,3,5,7,9);
for (Integer anInt : ints) {
System.out.println(anInt);
}
都转换成ArrayList了不来点花样能行?
int[] arr =new int[]{1,3,5,7,9};
Arrays.stream(arr).boxed().collect(Collectors.toList()).forEach(System.out::println);
问题背景
鄙人打算写个工具类:通过反射获取一个类的所有字段然后显示出来,由于反射获取的是Object类型,增加了困难。
问题解决
public static String arrayToString(Object arr) throws Exception {
if (!arr.getClass().isArray()) throw new Exception("不是数组类型");
// 转化为String 类型 方便处理
int length = Array.getLength(arr);
String[] objects = new String[length];
for (int i = 0; i < length; i++) objects[i]=Array.get(arr,i).toString();
return Arrays.stream(objects).collect(Collectors.toList()).toString();
}
好在Class
为我们提供了一个方法isArray
来判断是否是数组类型。
同时Array.getLength()让我们获取数组长度。
这里需要注意的是我们不能通过强制类型转换来获取数组元素,需要通过Array.get(arr,i)
来获取数组元素,这里为了处理方便我转换成了String类型.