gpt4 book ai didi

java - singletonList有什么用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:52:13 25 4
gpt4 key购买 nike

我一直在寻找一些优雅的解决方案来从列表中删除空值。我遇到了 following post ,它说我可以使用 list.removeAll(Collections.singletonList(null));

然而,这会抛出一个 UnsupportedOperationException,我假设这是因为 removeAll() 正试图对不可变的单例集合执行一些可变操作。这是正确的吗?

如果是这样的话,这个 singletonList 的典型用途是什么?当您确定不想对该集合做任何实际操作时表示大小为 1 的集合?

提前致谢。

最佳答案

它就像一个魅力:

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]

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

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

这段代码抛出一个UnsupportedOperationException。正如您所见,singletonList() 在这种情况下很有用。当客户端代码需要一个只读列表(它不会修改它)但您只想在其中传递一个元素时使用它。 singletonList() 是(线程)安全的(由于不变性)、快速且紧凑。

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

关于java - singletonList有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11205666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com