- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个相当大的流管道,因此想保持它的清洁。我有以下部分更大的管道
Integer defaultInt;
//...
Stream<Integer> ints;
ints.filter(/* predicate_goes_here */).collect(toSingletonIfEmptyCollector);
如果 toSingletonIfEmptyCollector
返回非空列表和 Collections.singletonList(defaultInt)
如果 Collectors.toList()
返回空。
有没有更短的方法来实现它(例如,通过组合 JDK 中提供的标准收集器)而不是从头开始实现所有 Collector
的方法?
最佳答案
您可以使用 collectingAndThen
并在内置的 toList()
收集器上执行额外的完成操作,如果没有元素,它将返回一个单例列表。
static <T> Collector<T, ?, List<T>> toList(T defaultValue) {
return Collectors.collectingAndThen(
Collectors.toList(),
l -> l.isEmpty() ? Collections.singletonList(defaultValue) : l
);
}
它会像这样使用:
System.out.println(Stream.of(1, 2, 3).collect(toList(5))); // prints "[1, 2, 3]"
System.out.println(Stream.empty().collect(toList(5))); // prints "[5]"
关于java - 如果 toList 返回空列表,则收集器返回 singletonList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38434730/
在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
我是一名优秀的程序员,十分优秀!