需求:一个方法传入的参数是Object类型(假设对象为“items”,使用Object类型也是为了使用多态而增加方法复用性),但已知这个Object对象可能是集合,包括Collection和Map,也可能是数组,包括对象类型数组和基本数据类型数组,那么如何将这个对象中的元素进行迭代,同时添加进一个集合中(我们不关心添加迭代出来的值是什么类型)。
分析:由于这个Object对象(假设为items)可能是Collection集合,也可能是Map集合,可能是对象类型数组,还可能是基本数据类型数组,但不管怎么样,集合或数组都逃不出这四种类型。关于对象类型数组和基本类型数组的迭代,请看上一篇博客。
那么要进行迭代之前,我们首先要来判断这个Object对象是什么类型,如果是Collection集合或者Map集合,那么如何迭代?尤其是Map集合。
解决:将所有的集合或者数组全部转换为Collection集合,如果本来就是Collection集合的子类对象,那么不需要做任何改变,如果是Map集合,那么就调用Map集合的entrySet方法获取Set集合对象(Set集合也是Collection集合的子类),如果是数组对象,不管是对象类型数组还是基本数据类型数组,使用集合类Array来迭代每个元素,封装到一个Collection集合对象中即可,这一点已经在上一篇博客中体现了。
代码:
public Collection setItems(Object items) {
if(items instanceof Collection) {
return (Collection) items;
} if(items instanceof Map) {
Map map = (Map) items;
return map.entrySet(); //Set
} if(items.getClass().isArray()) {
Collection coll = new ArrayList();
int length = Array.getLength(items);
for(int i=0;i<length;i++) {
Object value = Array.get(items, i);
coll.add(value);
}
return coll;
} return null;
}
应用1:
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
5 Collection collection = setItems(list);
System.out.println(collection);
结果:[aaa, bbb, ccc]
应用2:
Map map = new HashMap();
map.put("aa", "aaaa");
map.put("bb", "bbbb");
Collection collection = setItems(map);
System.out.println(collection);
结果:[aa=aaaa, bb=bbbb]
注意因为在setItems方法中,对Map集合进行了entrySet方法的调用,因此我们迭代的是Set集合。
应用3:
int[] arr = {1,2,3,4,5};
System.out.println(setItems(arr));
结果:[1, 2, 3, 4, 5]
应用4:
String[] arr = {"long","live","sd"};
System.out.println(setItems(arr));
结果:[long, live, sd]
如果一个Object对象可能是集合或者数组那么如何对其进行迭代的更多相关文章
-
new一个Object对象占用多少内存?
Java的自动内存管理机制省却了很多编码工作,大大地提高了Java的生产力,而且JVM的性能也越来越好,特别是G1的出现,改善了垃圾回收中stop the world的状况. 也许很多人都没有考虑过这 ...
-
如果一个Object对象可能是数组那么如何对其进行迭代
需求:一个方法传入的参数是Object类型(假设对象为“items”,使用Object类型也是为了使用多态而增加方法复用性),但已知这个Object对象可能是基本类型数组,也可能是对象数组,如何将这个 ...
-
[转]new一个Object对象占用多少内存?
我们分解下ArrayList arr = new ArrayList();等同于ArrayList arr = null;//初始化arr = new ArrayList();//实例化这两个过程.初 ...
-
【转】js判断一个object对象是否为空
判断一个对象是否为空对象,本文给出三种判断方法: 1.最常见的思路,for...in... 遍历属性,为真则为“非空数组”:否则为“空数组” for (var i in obj) { // 如果不为空 ...
-
js判断一个 object 对象是否为空
方法一:使用for...in for...in... 遍历属性,为真则为“非空数组”:否则为“空数组” for (var i in obj) { return true // 如果不为空,则会执行到 ...
-
原生JS:Object对象详细参考
Object对象详细参考 本文参考MDN做的详细整理,方便大家参考MDN JavaScript原生提供一个Object对象(注意起首的O是大写),所有其他对象都继承自这个对象. 构造函数: Objec ...
-
javascript ES5 Object对象
原文:http://javascript.ruanyifeng.com/stdlib/object.html 目录 概述 Object对象的方法 Object() Object.keys(),Obje ...
-
c#中jeson字符串和OBJECT对象的相互转换
对于本问题 我用三步来分别说明实现过程 1.定义一个类---- 实现转换的具体方法 using System; using System.Collections.Generic; using Sy ...
-
打印object对象
在测试条件一般js时间,假定数据接口返回object对象. 假设不知道这个对象里面详细的属性就取值easy得到undefined. 哪么怎么知道一个object对象里面究竟是什么东西呢. 答案就是将其 ...
随机推荐
-
OAF_开发系列01_实现OAF资料主从关系Master-Detail联动(案例)
2014-06-02 Created By BaoXinjian
-
【MFC学习笔记-作业5-小数据库】【单选框,复选框,滚动条,列表框】
界面已经实现完毕. 要完成的操作就是1.性别分组(2选1) 2.属性勾选 3.年龄通过滚动条调整 4.职称通过下方的列表框选择 5.输入姓名 6.存入左方的列表框 7.当选择左方列表框的人时,可以显示 ...
-
Spark调研笔记第2篇 - 怎样通过Sparkclient向Spark提交任务
在上篇笔记的基础上,本文介绍Sparkclient的基本配置及Spark任务提交方式. 1. Sparkclient及基本配置 从Spark官网下载的pre-built包中集成了Sparkclient ...
-
ubuntu apache 安装awstats 流量分析工具(命令方式)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
-
jenkins系列之添加全局配置(一)
第一步: 第二步:执行以下命令: 第三步:找到/c/Users/Administrator/.ssh 目录,里面有两个文件:id_rsa和id_rsa.pub 第四步:配置ssh[这里是id_rsa. ...
-
Get Started with the Google Fonts API
Get Started with the Google Fonts API This guide explains how to use the Google Fonts API to add fon ...
-
Codeforces 336D Dima and Trap Graph 并查集
Dima and Trap Graph 枚举区间的左端点, 然后那些左端点比枚举的左端点小的都按右端点排序然后并查集去check #include<bits/stdc++.h> #defi ...
-
UNIX环境编程学习笔记(18)——进程管理之进程控制三部曲
lienhua342014-10-05 1 进程控制三部曲概述 UNIX 系统提供了 fork.exec.exit 和 wait 等基本的进程控制原语.通过这些进程控制原语,我们即可完成对进程创建.执 ...
-
Ember.js学习教程 -- 目录
写在前面的话: 公司的新项目需要用到Ember.js,版本为v1.13.0.由于网上关于Ember的资料非常少,所以只有硬着头皮看官网的Guides,为了加深印象和方便以后查阅就用自己拙劣的英语水平把 ...
-
Python staticmethod() 函数
Python staticmethod() 函数 Python 内置函数 python staticmethod 返回函数的静态方法. 该方法不强制要求传递参数,如下声明一个静态方法: class ...