在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
)。