Java奇技淫巧:遍历任意数组

后端 / 2021-02-06

前言

说起遍历数组可能稍微有点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类型.