如果一個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]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM