- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在寻找一些优雅的解决方案来从列表中删除空值。我遇到了 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]在 scala可变和不可变集合有一个单独的层次结构,API 可以选择是接受这个还是另一个(或两者都接受,因为它们有共同的基础接口(interface))
关于java - singletonList有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11205666/
在Java中,Collections.SingletonList()有什么用处?我知道它返回一个只有一个元素的列表。为什么我要有一个单独的方法来做这件事呢?不变性在这里起到了怎样的作用?。这个方法有什
与 Collections.singletonList(something) 相比,使用 Arrays.asList(something) 来制作一个列表是否有优势(或有很大的不同)?后者也使返回的列
我需要将 comment 元素发送到 HTML。 没有comment DTO,它实际上是TaskComment。我在 Task 类中定义了这样的 @ElementCollection priv
我有一个相当大的流管道,因此想保持它的清洁。我有以下部分更大的管道 Integer defaultInt; //... Stream ints; ints.filter(/* predicate_go
如何将 java.util.Collections$UnmodifiableRandomAccessList 转换为 Collections.singletonList?为了在两个服务之间存储 ses
Java 9 引入了工厂方法以使用 List.of 创建不可变列表。 哪个更适合创建一个元素的不可变列表? List immutableList1 = List.of("one");
据我所知,这两种 Collection 方法都提供对返回列表的只读访问并在修改时抛出异常。 我需要了解两者的用例,以便何时使用 singletonList 和 unmodifiableList。 这可
假设我有这个代码: String[] left = { "1", "2" }; String[] leftNew = Collections.emptyList().toArray(left); Sy
我不明白为什么lombok使用singletonList,这里有一个演示: @Cleanup FileInputStream fos = new FileInputStream("aa.txt");
我知道如果我有元素,我想得到 List/Set/Map 我可以调用这个元素: Collections.singleton()/Collections.singletonList()/Collectio
给定集合: Collection expected = Collections.singletonList(new MyObject); Collection actual = Collections
我是一名优秀的程序员,十分优秀!