Java递归的问题?

jinggangshi 2021-02-19 05:34:18

public static <T> List<T> extractedList(Object o) {

// 创建返回对象
List<T> result = new ArrayList<T>();

// 判断对象是否数组
if (o.getClass().isArray()) {
// 是数组,则遍历
for (int i = 0; i < Array.getLength(o); i++) {

// 递归,不是数组将返回加入到列表尾,是则继续递归
result.add((T) extractedList(Array.get(o, i)));
}

} else {
// 加入对象到列表
result.add((T) o);
}
// 返回数组列表
return result;// new ArrayList<T>(result);
}

测试数据
String[][] menuListtest = new String[][] { { "name1", "text1", "cmd1", "key1" },
{ "name2", "text2", "cmd2", "key2" } };

得到结果
[[[name1], [text1], [cmd1], [key1]], [[name2], [text2], [cmd2], [key2]]]

应该的结果:
[[name1, text1, cmd1, key1], [name2, text2, cmd2, key2]]

不知道如何解决.
主要是想实现:不知道数组的维数的递归转换????
...全文
590 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinggangshi 2021-03-11
  • 打赏
  • 举报
回复
引用 4 楼 冰思雨 的回复:
楼主的代码,主要问题是出在一位数组做参数时。 先解决一位数组做参数时,返回值出现的问题,多维数组就迎刃而解了。
谢谢
冰思雨 2021-03-04
  • 打赏
  • 举报
回复
楼主的代码,主要问题是出在一位数组做参数时。 先解决一位数组做参数时,返回值出现的问题,多维数组就迎刃而解了。
jinggangshi 2021-02-23
  • 打赏
  • 举报
回复
List<Object> curObject = extractedList(Array.get(o, i));
				if (curObject.size() == 1) {
					result.add((T) curObject.get(0));//这里去掉[]
				} else {
					result.add((T) curObject);
				}
谢谢两位,我的做法与两位类似,回头再试下两位的代码
爱摸鱼de老邪 2021-02-22
  • 打赏
  • 举报
回复
递归结束条件错误,在递归到传入参数为1维数组时,就应该结束递归了。

public static <T> List<T> extractedList(Object o) {
 
    // 创建返回对象
    List<T> result = new ArrayList<T>();
    
    Class type=o.getClass();

    // 判断对象是否数组
    if (type.isArray()) {
        Class ct=type.getComponentType();
        int len=Array.getLength(o);
        if(ct.isArray()) {
           for(int i=0;i<len;i++) {
              result.add((T) extractedList(Array.get(o, i)));
            }
         }
         else {
             for(int i=0;i<len;i++) {
                 reuslt.add((T) Array.get(o, i));
              }
          }
      }
      return result;
}
i__0o0__ 2021-02-20
  • 打赏
  • 举报
回复

//标志当前返回的List是个数组还是对象
	public static boolean isObjectFlag = false;
	public static <T> List<T> extractedList(Object o) {
		
	    // 创建返回对象
	    List<T> result = new ArrayList<T>();
	 
	    // 判断对象是否数组
	    if (o.getClass().isArray()) {
	        // 是数组,则遍历
	        for (int i = 0; i < Array.getLength(o); i++) {
	 
	            // 递归,不是数组将返回加入到列表尾,是则继续递归
	        	List<T> temp = extractedList(Array.get(o, i));
	        	if(!isObjectFlag) {  //如果是数组则直接加入
	        		result.add((T) temp);
	        	}else {  //如果是对象则取返回集合中的第一个对象 加入
	        		result.add(temp.get(0));
	        	}
	        	isObjectFlag = false;
	        }
	    } else {
	        // 加入对象到列表
	    	isObjectFlag = true;
	        result.add((T) o);
	    }
	    // 返回数组列表
	    return result;// new ArrayList<T>(result);
	}

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧