需求:一个方法传入的参数是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对象可能是集合或者数组那么如何对其进行迭代的更多相关文章

  1. new一个Object对象占用多少内存?

    Java的自动内存管理机制省却了很多编码工作,大大地提高了Java的生产力,而且JVM的性能也越来越好,特别是G1的出现,改善了垃圾回收中stop the world的状况. 也许很多人都没有考虑过这 ...

  2. 如果一个Object对象可能是数组那么如何对其进行迭代

    需求:一个方法传入的参数是Object类型(假设对象为“items”,使用Object类型也是为了使用多态而增加方法复用性),但已知这个Object对象可能是基本类型数组,也可能是对象数组,如何将这个 ...

  3. [转]new一个Object对象占用多少内存?

    我们分解下ArrayList arr = new ArrayList();等同于ArrayList arr = null;//初始化arr = new ArrayList();//实例化这两个过程.初 ...

  4. 【转】js判断一个object对象是否为空

    判断一个对象是否为空对象,本文给出三种判断方法: 1.最常见的思路,for...in... 遍历属性,为真则为“非空数组”:否则为“空数组” for (var i in obj) { // 如果不为空 ...

  5. js判断一个 object 对象是否为空

    方法一:使用for...in for...in... 遍历属性,为真则为“非空数组”:否则为“空数组” for (var i in obj) { return true  // 如果不为空,则会执行到 ...

  6. 原生JS:Object对象详细参考

    Object对象详细参考 本文参考MDN做的详细整理,方便大家参考MDN JavaScript原生提供一个Object对象(注意起首的O是大写),所有其他对象都继承自这个对象. 构造函数: Objec ...

  7. javascript ES5 Object对象

    原文:http://javascript.ruanyifeng.com/stdlib/object.html 目录 概述 Object对象的方法 Object() Object.keys(),Obje ...

  8. c#中jeson字符串和OBJECT对象的相互转换

    对于本问题   我用三步来分别说明实现过程 1.定义一个类---- 实现转换的具体方法 using System; using System.Collections.Generic; using Sy ...

  9. 打印object对象

    在测试条件一般js时间,假定数据接口返回object对象. 假设不知道这个对象里面详细的属性就取值easy得到undefined. 哪么怎么知道一个object对象里面究竟是什么东西呢. 答案就是将其 ...

随机推荐

  1. BZOJ 1833: [ZJOI2010]count 数字计数( dp )

    dp(i, j, k)表示共i位, 最高位是j, 数字k出现次数. 预处理出来. 差分答案, 对于0~x的答案, 从低位到高位进行讨论 -------------------------------- ...

  2. POJ 3624 01背包

    初学DP,用贪心的思想想解题,可是想了一个多小时还是想不出. //在max中的两个参数f[k], 和f[k-weight[i]]+value[i]都是表示在背包容量为k时的最大价值 //f[k]是这个 ...

  3. activebar的用法

    效果图: 网站页面上弹出消息提示狂,用来提示重大事件. <script src="http://www.ijquery.cn/js/jquery-1.7.2.min.js"& ...

  4. JS给元素增加className

    function(element,value) //给元素添加className { if(!element.className) { element.className=value; } else{ ...

  5. Delphi_MemoryModule — load DLL from memory. Also includes hooking utilities.

    https://github.com/Fr0sT-Brutal/Delphi_MemoryModule

  6. 查看电脑已安装的Jdk的位数

    查看自己电脑已安装的Jdk的位数的方法: public class ShowJdkBit { public static void main(String[] args) { String arch ...

  7. 以xml的方式实现动画

    1.java代码 package com.example.tweenanim; import android.os.Bundle; import android.app.Activity; impor ...

  8. DH11数字温湿度传感器

    DH11数字温湿度传感器是一种集温度.湿度一体的复合传感器,它能把温度和湿度物理量通过温.湿度敏感元件和相应电路转化成方便计算机.PLC.智能仪表等数据采集设备直接读取的数字量.DHT11由电阻式感湿 ...

  9. Ubuntu: 搭建tftp,nfs服务器

    Ubuntu12.04搭建tftp&nfs服务器 http://blog.163.com/thinki_cao/blog/static/83944875201411610467306/ 硬件环 ...

  10. javascript重点笔记

    操作符之间的优先级(高到低):算术操作符 >比较操作符 >逻辑操作符 >"="赋值符号 算术运算符