java - 仅当流不是空后缀时,自定义收集器才在分隔符、后缀和前缀上加入流
问题描述
我有一个字符串流:
Stream<String> stream = ...;
我想使用创建一个字符串
stream.collect(Collectors.joining(',', '[', ']'))
如果流不包含任何元素,我只想返回“No Strings”。
我注意到该String java.util.stream.Stream.collect(Collector<? super String, ?, String> collector)
方法采用 java.util.stream.Collector<T, A, R> 类型的参数
对于我的项目,我在很多地方都需要这个功能,所以我需要一个实现Collector
接口的类。
我知道这可以通过 Stream to a List 来完成,然后检查 List.size() == 0?然后在需要时再次将列表转换为流。
List<String> list = stream.collect(Collectors.toList());
if (list.size() == 0) {
return "No Strings";
}
return list.stream().collect(Collectors.joining(",", "[", "]"));`
这就是我想要发生的事情
List emptyList<String> = new ArrayList<>; System.out.println(emptyList.stream().collect(Collectors.joining(",", "[", "]")));
输出
[]
我想要的输出
No Strings
解决方案
老实说,我会采用您目前的方法(测试空虚)。
但是如果你真的想使用直接的收集器,你可以使用的源代码Collections.joining
和JavadocStringJoiner
作为指南来制作自定义收集器:
Collector.of(
() -> new StringJoiner(",", "[", "]").setEmptyValue("No strings"),
StringJoiner::add,
StringJoiner::merge,
StringJoiner::toString)
推荐阅读
- javascript - 将 16 位 RGB 值转换为一个十进制值
- python-3.x - 为什么 Python 在 else 语句之后会返回错误信息?
- flutter - Flutter 使用 Provider 时出现“EditableText 上方不存在覆盖小部件”错误
- python - 一个页面中有很多画廊框,但只有第一个框可以工作 Django
- excel - 如何在 Excel 中动态调整计算范围
- c# - 自定义授权属性角色不起作用 web api 身份验证
- azure - 清除注销后在 Azure AD 中选择一个帐户
- docker - 无法从本地计算机上的 java 应用程序连接到哨兵
- php - 如何让用户在 laravel 中使用 SMTP 发送邮件
- ruby - Writing two variables in a file via chef file resource content