singletonList有什么用?

mmo*_*ore 11 java collections list

我正在寻找一些优雅的解决方案来从List中删除空值.我发现了以下帖子,其中说我可以使用 list.removeAll(Collections.singletonList(null));

但是,这会抛出UnsupportedOperationException,我假设是因为UnsupportedOperationException它试图对不可变的singleton集合进行一些变异操作.它是否正确?

如果是这种情况,那么singleList的典型用法是什么?要在您确定不想对集合实际执行任何操作时表示大小为1的集合?

提前致谢.

Tom*_*icz 16

它就像一个魅力:

List<String> list = new ArrayList<String>();
list.add("abc");
list.add(null);
list.add("def");
list.removeAll(Collections.singletonList(null));
System.out.println(list);  //[abc, def]
Run Code Online (Sandbox Code Playgroud)

确实Collections.singletonList(null)是不可变的(不幸的是隐藏在Java [1]中),但异常是从你的list变量抛出的.显然它也是不可变的,如下例所示:

List<String> list = Arrays.asList("abc", null, "def");
list.removeAll(Collections.singletonList(null));
Run Code Online (Sandbox Code Playgroud)

这段代码抛出一个UnsupportedOperationException.因此,您可以看到singletonList()在这种情况下很有用.当客户端代码需要一个只读列表(它不会修改它)时使用它,但你只想传递一个元素.singletonList()是(线程)安全的(由于不变性),快速和紧凑.

[1]例如,在有一个可变和不可变集合的separete层次结构,API可以选择是接受这个还是另一个(或两者都有,因为它们有共同的基接口)