• 如果一个Object对象可能是集合或者数组那么如何对其进行迭代


      需求:一个方法传入的参数是Object类型(假设对象为“items”,使用Object类型也是为了使用多态而增加方法复用性),但已知这个Object对象可能是集合,包括Collection和Map,也可能是数组,包括对象类型数组和基本数据类型数组,那么如何将这个对象中的元素进行迭代,同时添加进一个集合中(我们不关心添加迭代出来的值是什么类型)。

      分析:由于这个Object对象(假设为items)可能是Collection集合,也可能是Map集合,可能是对象类型数组,还可能是基本数据类型数组,但不管怎么样,集合或数组都逃不出这四种类型。关于对象类型数组和基本类型数组的迭代,请看上一篇博客。

      那么要进行迭代之前,我们首先要来判断这个Object对象是什么类型,如果是Collection集合或者Map集合,那么如何迭代?尤其是Map集合。

      解决:将所有的集合或者数组全部转换为Collection集合,如果本来就是Collection集合的子类对象,那么不需要做任何改变,如果是Map集合,那么就调用Map集合的entrySet方法获取Set集合对象(Set集合也是Collection集合的子类),如果是数组对象,不管是对象类型数组还是基本数据类型数组,使用集合类Array来迭代每个元素,封装到一个Collection集合对象中即可,这一点已经在上一篇博客中体现了。

    代码:

     1 public Collection setItems(Object items) {
     2     if(items instanceof Collection) {
     3         return (Collection) items;
     4     }
     5         
     6     if(items instanceof Map) {
     7         Map map = (Map) items;
     8         return map.entrySet();  //Set
     9     }
    10         
    11     if(items.getClass().isArray()) {
    12         Collection coll = new ArrayList();
    13         int length = Array.getLength(items);
    14         for(int i=0;i<length;i++) {
    15             Object value = Array.get(items, i);
    16             coll.add(value);
    17         }
    18         return coll;
    19     }
    20         
    21     return null;
    22 }

    应用1:

    1   List list = new ArrayList();
    2   list.add("aaa");
    3   list.add("bbb");
    4   list.add("ccc");
    5   Collection collection = setItems(list);
    6    System.out.println(collection);

    结果:[aaa, bbb, ccc]

    应用2:

    1   Map map = new HashMap();
    2   map.put("aa", "aaaa");
    3   map.put("bb", "bbbb");
    4   Collection collection = setItems(map);
    5   System.out.println(collection);

    结果:[aa=aaaa, bb=bbbb]

      注意因为在setItems方法中,对Map集合进行了entrySet方法的调用,因此我们迭代的是Set集合。

    应用3:

    1     int[] arr = {1,2,3,4,5};
    2     System.out.println(setItems(arr));

    结果:[1, 2, 3, 4, 5]

    应用4:

    1     String[] arr = {"long","live","sd"};
    2     System.out.println(setItems(arr));

    结果:[long, live, sd]

  • 相关阅读:
    LDA模型了解及相关知识
    GAN
    tensorflow学习6
    GAN的文献综述
    python相关工具
    tensorflow学习5----变量管理
    tensorflow学习5----GAN模型初探
    8月14日至8月20日技术积累
    8月7日至8月13日技术积累
    8月1日到8月6日技术要点
  • 原文地址:https://www.cnblogs.com/fjdingsd/p/5272273.html
Copyright © 2020-2023  润新知