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]例如,在scala中有一个可变和不可变集合的separete层次结构,API可以选择是接受这个还是另一个(或两者都有,因为它们有共同的基接口)
| 归档时间: |
|
| 查看次数: |
10093 次 |
| 最近记录: |