Easiest way to convert a List to a Set in Java
在Java中,将EDCOX1的0度转换为EDCOX1×1的最简单的方法是什么?
1  | Set<Foo> foo = new HashSet<Foo>(myList);  | 
我同意SEPP2K,但还有其他一些可能重要的细节:
1  | new HashSet<Foo>(myList);  | 
将给您一个没有排序的集合,该集合没有重复项。在本例中,重复是使用对象上的.equals()方法标识的。这是结合.hashcode()方法完成的。(更多关于平等的信息,请看这里)
提供排序集的另一种方法是:
1  | new TreeSet<Foo>(myList);  | 
如果foo实现了可比性,这是可行的。如果没有,那么您可能需要使用比较器:
1 2  | Set<Foo> lSet = new TreeSet<Foo>(someComparator); lSet.addAll(myList);  | 
这取决于compareTo()(来自可比较接口)或compare()(来自comparator)以确保唯一性。因此,如果您只关心唯一性,那么就使用哈希集。如果您正在排序,那么考虑树集。(记住:以后再优化!)如果时间效率很重要,请使用哈希集如果空间效率很重要,请查看treeset。请注意,通过trove(和其他位置)可以更有效地实现集合和映射。
如果您使用了番石榴图书馆:
1  | Set<Foo> set = Sets.newHashSet(list);  | 
或者,更好:
1  | Set<Foo> set = ImmutableSet.copyOf(list);  | 
使用Java 8可以使用流:
1 2  | List<Integer> mylist = Arrays.asList(100, 101, 102); Set<Integer> myset = mylist.stream().collect(Collectors.toSet()));  | 
1  | Set<E> alphaSet  = new HashSet<E>(<your List>);  | 
或者完整的例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29  | import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class ListToSet { public static void main(String[] args) { List<String> alphaList = new ArrayList<String>(); alphaList.add("A"); alphaList.add("B"); alphaList.add("C"); alphaList.add("A"); alphaList.add("B"); System.out.println("List values ....."); for (String alpha : alphaList) { System.out.println(alpha); } Set<String> alphaSet = new HashSet<String>(alphaList); System.out.println(" Set values ....."); for (String alpha : alphaSet) { System.out.println(alpha); } } }  | 
我将在转换为set之前执行空检查。
1 2 3  | if(myList != null){ Set<Foo> foo = new HashSet<Foo>(myList); }  | 
对于Java 8来说非常简单:
1 2 3  | List < UserEntity > vList= new ArrayList<>();  vList= service(...); Set<UserEntity> vSet= vList.stream().collect(Collectors.toSet());  | 
您可以将
1 2 3 4 5 6 7 8  | Set<T> set=new HashSet<T>(); //Added dependency -> If list is null then it will throw NullPointerExcetion. Set<T> set; if(list != null){ set = new HashSet<T>(list); }  | 
让我们不要忘记我们相对较新的朋友java-8流API。如果在将列表转换为集合之前需要对其进行预处理,则最好具有以下内容:
1  | list.stream().<here goes some preprocessing>.collect(Collectors.toSet());  | 
爪哇-阿达尔
1  | set.addAll(aList);  | 
新对象
1  | 
JAVA-8
1  | list.stream().collect(Collectors.toSet());  | 
使用古瓦
1  |  Sets.newHashSet(list)  | 
阿帕奇公地
1  | CollectionUtils.addAll(targetSet, sourceList);  | 
使用Java 10,您现在可以使用EDCOX1(8)来轻松地将EDCOX1的9度转换为不可修改的EDOCX1 10。
例子:
1  | 
记住,这是一个无序操作,不允许使用
如果您希望它是可修改的,那么只需将它传递给构造函数一个
有多种方法可以得到一个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19  |     List<Integer> sourceList = new ArrayList(); sourceList.add(1); sourceList.add(2); sourceList.add(3); sourceList.add(4); // Using Core Java Set<Integer> set1 = new HashSet<>(sourceList); //needs null-check if sourceList can be null. // Java 8 Set<Integer> set2 = sourceList.stream().collect(Collectors.toSet()); Set<Integer> set3 = sourceList.stream().collect(Collectors.toCollection(HashSet::new)); //Guava Set<Integer> set4 = Sets.newHashSet(sourceList); // Apache commons Set<Integer> set5 = new HashSet<>(4); CollectionUtils.addAll(set5, sourceList);  | 
当我们使用
使用构造函数的最佳方法
在Java 8中,还可以使用流API:
1  | 
一个具有EDCOX1和7的Java 8弹性解决方案
1  |