在Java中将列表转换为集的最简单的方法是什么?
当前回答
带有Optional.ofNullable的更具Java 8弹性的解决方案
Set<Foo> mySet = Optional.ofNullable(myList).map(HashSet::new).orElse(null);
其他回答
使用构造函数的最好方法
Set s= new HashSet(list);
在java 8中,你也可以使用stream api::
Set s= list.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为:
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);
当我们使用collections . toset()时,它返回一个集合,并且根据文档:对于返回的set的类型、可变性、可序列化性或线程安全性没有保证。如果我们想要获得一个HashSet,那么我们可以使用另一种方法来获得一个set(检查set3)。
在Java 10中,您现在可以使用Set#copyOf轻松地将List<E>转换为不可修改的Set<E>:
例子:
var set = Set.copyOf(list);
请记住,这是一个无序操作,不允许使用空元素,因为它将抛出NullPointerException异常。
如果您希望它是可修改的,那么只需将它传递给构造函数一个Set实现。
请记住,从List转换到Set将从集合中删除重复项,因为List支持重复项,而Set在Java中不支持重复项。
直接转换:将List转换为Set的最常见和最简单的方法
// Creating a list of strings
List<String> list = Arrays.asList("One", "Two", "Three", "Four");
// Converting a list to set
Set<String> set = new HashSet<>(list);
Apache Commons Collections:你也可以使用Commons Collections API将一个List转换为一个Set
// Creating a list of strings
List<String> list = Arrays.asList("One", "Two", "Three", "Four");
// Creating a set with the same number of members in the list
Set<String> set = new HashSet<>(4);
// Adds all of the elements in the list to the target set
CollectionUtils.addAll(set, list);
使用流:另一种方法是将给定的列表转换为流,然后将流转换为集:-
// Creating a list of strings
List<String> list = Arrays.asList("One", "Two", "Three", "Four");
// Converting to set using stream
Set<String> set = list.stream().collect(Collectors.toSet());
推荐文章
- 在log4j中,在记录日志之前检查isDebugEnabled是否能提高性能?
- 没有JAXB生成的@XmlRootElement
- Java中对象的内存消耗是多少?
- 获取Spring应用程序背景信息
- 为什么在Java中使用静态嵌套接口?
- @Mock, @MockBean和Mockito.mock()的区别
- JDK 8中的PermGen消除
- 如何将CharSequence转换为字符串?
- 在Java中初始化一个long
- Java的数组indexOf在哪里?
- 同一个键下的多个值
- 使用JSTL检查集合大小
- Java“虚拟机”vs. Python“解释器”的说法?
- 获取操作系统级别的系统信息
- 如何通过SFTP从服务器检索文件?