【发布时间】:2018-05-17 16:42:22
【问题描述】:
在 Java 9 中,在 Set 接口上引入了新的静态工厂方法,称为 of(),它接受多个元素,甚至是一个元素数组。
我想将一个列表变成一个集合以删除集合中的任何重复条目,这可以使用以下方法完成(在 Java 9 之前):
Set<String> set = new HashSet<>();
set.addAll(list);
但我认为使用这种新的 Java 9 静态工厂方法会很酷:
Set.of(list.toArray())
其中list 是先前定义的字符串列表。
但是,当元素重复时,java 抛出了IllegalArgumentException,在方法的 Javadoc 中也有说明。这是为什么呢?
编辑:这个问题不是另一个关于概念上等价主题 Map.of() 方法的问题的重复,但明显不同。并非所有静态工厂 of() 方法的行为都相同。换句话说,当我询问有关 Set.of() 方法的问题时,我不会点击处理 Map.of() 方法的问题。
【问题讨论】:
-
我不确定为什么会这样,但作为替代方案,我可以建议使用以下 Java 8 语句为您执行重复数据删除:
list.stream().collect(Collectors.toSet()) -
或者直接用古单
new HashSet<>(list);
标签: java collections set java-9