在Java中将列表转换为集合最简单的方法

在Java中将List转换为Set的最简单方法是什么?

 Set<Foo> foo = new HashSet<Foo>(myList); 

我同意sepp2k,但还有一些其他细节可能很重要:

 new HashSet<Foo>(myList); 

会给你一个没有重复的未sorting的集合。 在这种情况下,使用对象上的.equals()方法来识别重复。 这与.hashCode()方法结合使用。 (更多关于平等看这里 )

给出有序集合的替代scheme是:

 new TreeSet<Foo>(myList); 

这在Foo实现Comparable的情况下有效。 如果没有,那么你可能想使用比较器:

 Set<Foo> lSet = new TreeSet<Foo>(someComparator); lSet.addAll(myList); 

这取决于compareTo()(来自可比较的接口)或compare()(来自比较器)以确保唯一性。 所以,如果你只关心唯一性,使用HashSet。 如果你sorting后,然后考虑TreeSet。 (请记住:稍后优化!)如果时间效率问题在空间效率问题上使用HashSet,请查看TreeSet。 请注意,通过Trove(和其他位置)可以更有效地执行Set和Map。

如果您使用番石榴图书馆:

 Set<Foo> set = Sets.newHashSet(list); 

或者更好:

 Set<Foo> set = ImmutableSet.copyOf(list); 

使用java 8你可以使用stream:

 List<Integer> mylist = Arrays.asList(100, 101, 102); Set<Integer> myset = mylist.stream().collect(Collectors.toSet())); 
 Set<E> alphaSet = new HashSet<E>(<your List>); 

或完整的例子

 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("\nSet values ....."); for (String alpha : alphaSet) { System.out.println(alpha); } } } 

在转换为set之前,我会执行Null检查。

 if(myList != null){ Set<Foo> foo = new HashSet<Foo>(myList); } 

您可以将List<>转换为Set<>

 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来说,这非常简单:

 List < UserEntity > vList= new ArrayList<UserEntity>(); vList= service(...); Set<UserEntity> vSet= vList.stream().collect(Collectors.toSet()); 

我们不要忘记我们相对较新的朋友, java-8streamAPI。 如果您需要在将列表转换为集合之前进行预处理,最好有如下所示:

 list.stream().<here goes some preprocessing>.collect(Collectors.toSet()); 

有多种方法可以将Set为:

  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); 

当我们使用Collectors.toSet()它会根据文档返回一个集合:对返回的集合There are no guarantees on the type, mutability, serializability, or thread-safety of the Set returned 。 如果我们想得到一个HashSet那么我们可以使用另一个替代方法来获得一个集合(检查set3 )。