请用java语言帮我实现一个接口,该接口可以把一个具有层级结构的对象的每层数据都提取出来重新组装成一个具有层级结构的数据。
时间: 2023-11-22 10:53:19 浏览: 31
可以尝试使用递归实现该接口。以下是一个示例代码:
```
public interface DataExtractor {
Map<String, Object> extractData(Object obj);
}
public class DataExtractorImpl implements DataExtractor {
@Override
public Map<String, Object> extractData(Object obj) {
if (obj == null) {
return null;
}
Map<String, Object> data = new HashMap<>();
if (obj instanceof Map) {
Map<Object, Object> map = (Map<Object, Object>) obj;
for (Map.Entry<Object, Object> entry : map.entrySet()) {
Object key = entry.getKey();
Object value = entry.getValue();
if (value != null) {
data.put(key.toString(), extractData(value));
}
}
} else if (obj instanceof Collection) {
Collection collection = (Collection) obj;
int i = 0;
for (Object value : collection) {
if (value != null) {
data.put(Integer.toString(i++), extractData(value));
}
}
} else if (obj.getClass().isArray()) {
int length = Array.getLength(obj);
for (int i = 0; i < length; i++) {
Object value = Array.get(obj, i);
if (value != null) {
data.put(Integer.toString(i), extractData(value));
}
}
} else {
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
try {
Object value = field.get(obj);
if (value != null) {
data.put(field.getName(), extractData(value));
}
} catch (IllegalAccessException e) {
// ignore
}
}
}
return data;
}
}
```
该实现可以处理以下三种类型的数据:
- Map:将每个键值对的值递归提取出来,作为新的Map的值。
- Collection:将每个元素递归提取出来,作为新的Map的值,键为元素的下标。
- Array:将每个元素递归提取出来,作为新的Map的值,键为元素的下标。
- 其他类型的对象:将对象的每个字段递归提取出来,作为新的Map的值,键为字段名。
你可以根据具体的需求,对该实现进行修改和优化。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)