我需要一個java函數,它將從java.util.List
轉換爲java.util.Set
,反之亦然,與List/Set
中的對象類型無關。Java:通用列表來設置轉換,反之亦然
回答
贊List.addAll
和Set.addAll
?
public static <E> Set<E> getSetForList(List<E> lst){
return new HashSet<E>(lst);//assuming you don't care for duplicate entry scenario :)
}
public static <E> List<E> getListForSet(Set<E> set){
return new ArrayList<E>(set);// You can select any implementation of List depending on your scenario
}
大多數類java collection framework的有一個構造函數,考慮元素的集合作爲參數。您應該使用您喜歡的實現噸做轉換爲exameple(與HashSet
和ArrayList
):
public class MyCollecUtils {
public static <E> Set<E> toSet(List<E> l) {
return new HashSet<E>(l);
}
public static <E> List<E> toSet(Set<E> s) {
return new ArrayList<E>(s);
}
}
一個函數,而不是您可以有兩個函數來實現這個功能:
// Set to List
public List setToList(Set set) {
return new ArrayList(set);
}
// List to Set
public Set listToSet(List list) {
return new HashSet(list);
}
在單功能:
public Collection convertSetList(Collection obj) {
if (obj instanceof java.util.List) {
return new HashSet((List)obj);
} else if(obj instanceof java.util.Set) {
return new ArrayList((Set)obj);
}
return null;
}
實施例:(更新)
public class Main {
public static void main(String[] args) {
Set s = new HashSet();
List l = new ArrayList();
s.add("1");s.add("2");s.add("3");
l.add("a");l.add("b");l.add("c");
Collection c1 = convertSetList(s);
Collection c2 = convertSetList(l);
System.out.println("c1 type is : "+ c1.getClass());
System.out.println("c2 type is : "+ c2.getClass());
}
public static Collection convertSetList(Collection obj) {
if (obj instanceof java.util.List) {
System.out.println("List!");
return (Set)new HashSet((List) obj);
} else if (obj instanceof java.util.Set) {
System.out.println("Set!");
return (List)new ArrayList((Set) obj);
} else {
System.out.println("Unknow type!");
return null;
}
}
}
謝謝,我刪除了我的-1,但我仍然認爲這樣做不像你在'convertSetList'中建議的那樣明智:因爲既沒有返回List或Set,也沒有返回Collection。如果需要引用「List」或「Set」,則需要進行一些轉換。另外,當傳遞'List'或者'Set'以外的東西時,返回'null'(不好,IMO)。最後,你的代碼中仍然沒有泛型的使用,使得它的Java 1.4.2代碼(從很久以前!):) – 2011-03-16 09:26:31
上面的一段代碼爲我工作。根據用戶的需求他想要一個功能。很顯然,他需要演員或做一些驗證。那就是爲什麼這樣寫。糾正我,如果我錯了。謝謝。 – 2011-03-16 09:44:40
- 1. 將列轉換成行,反之亦然
- 2. 將JavaUtilDate轉換爲NSDate,反之亦然?
- 3. 將lonlat轉換爲xyz,反之亦然
- 4. 將UIImage轉換爲NSString(反之亦然)
- 5. DTO轉換爲實體,反之亦然
- 6. 將ArrayBuffer轉換爲Array,反之亦然
- 7. 將HTML轉換爲Xliff,反之亦然
- 8. 轉換Unicode字符串,反之亦然
- 9. 單爲Android JavaList轉換成列表,反之亦然
- 10. .NET - 將/映射列表轉換爲對象,反之亦然
- 11. 如何在Java中將POJO轉換爲Map,反之亦然?
- 12. 如何將Java日期轉換爲OADate或反之亦然?
- 13. 將Java時間戳轉換爲MySQL時間戳反之亦然
- 14. Java將字符串轉換爲md5,反之亦然
- 15. Java - 將byte []轉換爲double [],反之亦然
- 16. XML到XLSX,反之亦然使用java
- 17. Python內置base-256到base-10轉換,反之亦然?
- 18. SQLAlchemy列到行轉換,反之亦然 - 是否有可能?
- 19. 將文件轉換爲短陣列,反之亦然
- 20. 轉換爲字節陣列,反之亦然
- 21. 將字符串轉換爲位序列(反之亦然)
- 22. 將序列轉換爲字典,反之亦然
- 23. 序列化和Base64轉換,反之亦然vb.net
- 24. 使用GStreamer將wav轉換爲mp3(反之亦然)
- 25. 用於轉換native2ascii和反之亦然的庫
- 26. 使用ReSharper將'foreach'轉換爲'for'循環或反之亦然?
- 27. 轉換到char [32](或反之亦然)用C
- 28. 如何將Bayer轉換爲使用OpenCV的RGB,反之亦然
- 29. 編碼用來字節轉換數組字符串,反之亦然
- 30. SOAP消息格式到Socket消息格式轉換,反之亦然使用Java
正如你已經提到的:大多數採取收集作爲他們的C - tor的參數。那麼爲什麼不使用它:'toSet(Collection c)'和'toSet(Collection c)'? –
2011-03-16 09:10:28
在一般情況下,實際上,你甚至不會爲它構建函數,只是使用構造函數。正如我們在一個特定的情況下,問題是從列表轉換爲集合,反之亦然,我更喜歡指定參加集合的類型。 – Nicolas 2011-03-16 09:13:10
這段代碼非常簡單和基本,可能根本不值得一個函數。 Util.toSet(col)並不比新的HashSet(col)更好。然後,您可以選擇您的類的實際實現,並可以從任何集合類型轉換爲任何其他類型。 –
2011-03-16 09:18:09