Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单音列表有什么用?_Java_List_Collections_Scala - Fatal编程技术网

Java 单音列表有什么用?

Java 单音列表有什么用?,java,list,collections,scala,Java,List,Collections,Scala,我在四处寻找从列表中删除空值的优雅解决方案。我遇到了,它说我可以使用list.removeAll(Collections.singletonList(null)) 但是,这会抛出一个不支持操作异常,我假设这是因为removeAll()正在尝试对不可变的单例集合执行一些变异操作。这是正确的吗 如果是这种情况,这个单音列表的典型用法是什么?当您确定不想对集合执行任何操作时,是否表示大小为1的集合 提前感谢。它就像一个符咒: List<String> list = new ArrayLis

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

但是,这会抛出一个
不支持操作异常
,我假设这是因为
removeAll()
正在尝试对不可变的单例集合执行一些变异操作。这是正确的吗

如果是这种情况,这个
单音列表的典型用法是什么?当您确定不想对集合执行任何操作时,是否表示大小为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]
此代码将抛出一个
不支持操作异常
。如您所见,
singletonList()
在这种情况下很有用。当客户端代码需要一个只读列表(它不会修改它),但您只想在其中传递一个元素时,可以使用它
singletonList()
是(线程)安全的(由于不变性),快速且紧凑


[1] 例如,在中,有一个用于可变和不可变集合的分离层次结构,API可以选择是否接受这一层次结构或另一层次结构(或者两者都接受,因为它们有公共的基本接口)

您的列表是否受到了保护

集合。不可修改列表(列表)

因为如果您已对其进行了保护,并在以后尝试对其进行修改,则会出现该错误。

要回答您的实际问题:

这个单音列表的典型用法是什么?当您确定不想对集合执行任何操作时,是否表示大小为1的集合

典型的用法是,如果您有一个元素并希望将其传递给一个接受
列表的方法,即

public void registerUsers(List<User> users) {...}

User currentUser = Login Manager.getCurrentUser();
registerUsers(Collections.singletonList(currentUser));
公共无效注册表用户(列表用户){…}
User currentUser=Login Manager.getCurrentUser();
registerUsers(Collections.singletonList(currentUser));

removeAll()
是这方面的特例

你是如何申报名单的?使用Arrays.asList()?如果是这样,那么它将是不可改变的这正是我想要的。我不知道
Arrays.asList()
返回一个不可变的列表(尽管我记得读到它是“由传入它的数组支持的”)。这可以通过使用
ArrayList(Collection c)
的构造函数来修复:
新建ArrayList(Arrays.asList(someArray)).removeAll(Collections.singletonList(null))
public void registerUsers(List<User> users) {...}

User currentUser = Login Manager.getCurrentUser();
registerUsers(Collections.singletonList(currentUser));