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 |