java递归判断一个集合中不是集合就退出
时间: 2024-11-12 18:09:52 浏览: 13
详解Java多线程编程中互斥锁ReentrantLock类的用法
在Java中,如果你想要递归地遍历一个集合(如List、Set或Map),并且检查其中每个元素是否还是集合。如果遇到非集合元素,你可以选择跳出递归。这里是一个简单的示例:
```java
import java.util.*;
public class RecursiveCollectionTraversal {
public static boolean isNonRecursiveCollection(Object obj) {
// 首先检查是否已经是基本数据类型或者其他非集合类型
if (obj == null || !obj.getClass().isArray() && !Collection.class.isAssignableFrom(obj.getClass())) {
return true; // 非集合,退出递归
}
// 如果是数组,直接遍历
if (obj.getClass().isArray()) {
Class<?> componentType = obj.getClass().getComponentType();
for (Object item : (Object[]) obj) {
if (!isNonRecursiveCollection(item)) { // 深度递归处理数组中的元素
return false;
}
}
return true; // 所有元素都不是集合,返回true
}
// 对于集合,继续迭代
if (Collection.class.isAssignableFrom(obj.getClass())) {
Collection<?> collection = (Collection<?>) obj;
for (Object element : collection) {
if (!isNonRecursiveCollection(element)) { // 递归处理集合中的元素
return false;
}
}
return true; // 所有元素都不是集合,返回true
}
throw new IllegalArgumentException("Unsupported data type: " + obj.getClass());
}
public static void main(String[] args) {
Object testObj = Arrays.asList(new ArrayList<>(), 10, "Hello", new int[]{});
System.out.println(isNonRecursiveCollection(testObj)); // 输出结果取决于testObj的内容
}
}
```
在这个例子中,`isNonRecursiveCollection`方法会递归地遍历对象并检查每个元素。如果是非集合类型的,它会立即返回`true`;如果是数组或集合,它会进一步检查其内部元素。只要发现任何一个元素是集合类型,就会返回`false`,表示集合中有集合元素存在。
阅读全文