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));