我需要一个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. 行到列,反之亦然转换
- 3. 转换位图的ByteArray反之亦然
- 4. 转换浮到ndarray或反之亦然
- 5. 将ansi转换为utf8,反之亦然
- 6. 将float2转换为double2,反之亦然
- 7. 将lonlat转换为xyz,反之亦然
- 8. 将NSString转换为NSData,反之亦然
- 9. 转换Unicode字符串,反之亦然
- 10. 将HTML转换为Xliff,反之亦然
- 11. 将JavaUtilDate转换为NSDate,反之亦然?
- 12. DTO转换为实体,反之亦然
- 13. 将RSAPrivateKey转换为PrivateKey,反之亦然
- 14. 单为Android JavaList转换成列表,反之亦然
- 15. .NET - 将/映射列表转换为对象,反之亦然
- 16. 关于Java到XML的转换,反之亦然
- 17. 将Java对象转换为Json,反之亦然?
- 18. Java - 将byte []转换为double [],反之亦然
- 19. 如何将字符串转换为Java文件,反之亦然?
- 20. 如何将XML从XML转换为Java,反之亦然?
- 21. 将Java对象转换为Xml,反之亦然
- 22. Java将字符串转换为md5,反之亦然
- 23. 将Java时间戳转换为MySQL时间戳反之亦然
- 24. 将ArrayList <Double>转换为Double Array,反之亦然JAVA/Android
- 25. 如何将Java日期转换为OADate或反之亦然?
- 26. 如何在Java中将POJO转换为Map,反之亦然?
- 27. XML到XLSX,反之亦然使用java
- 28. Python内置base-256到base-10转换,反之亦然?
- 29. 将序列转换为字典,反之亦然
- 30. 序列化和Base64转换,反之亦然vb.net
正如你已经提到的:大多数采取收集作为他们的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