java - 如何映射列表其中每个字符串都是逗号分隔的字符串到 List以逗号分隔加入?
问题描述
标签——["tag1", "tag2, tag3"]
预期输出——["tag1","tag2","tag3"]
当前代码:
List<String> tagsProcessed = new ArrayList<>();
for(String t : tags) {
tagsProcessed.addAll(Stream.of(t.split(",")).map(String::trim).collect(Collectors.toList()));
}
如何用流重写它?
解决方案
许多解决方案之一:
var delimiter = Pattern.compile(",");
tags.stream()
.flatMap(delimiter::splitAsStream)
.map(String::trim)
.forEach(tagsProcessed::add);
或者,避免(隐藏!)trim
调用(但不删除输入字符串开头和结尾的空格):
var delimiter = Pattern.compile("\\s*,\\s*");
tags.stream()
.flatMap(delimiter::splitAsStream)
.forEach(tagsProcessed::add);
我更喜欢第一个,清楚地显示对trim
以上所有内容也可以更改为(直接)使用 的结果Collectors.toList()
,但要注意返回的种类List
。从文档:
不保证返回的 List 的类型、可变性、可序列化性或线程安全性;如果需要对返回的列表进行更多控制,请使用 toCollection(Supplier)。
使用它addAll
不是问题(但类似于forEach
上面代码中的使用);如果返回的列表没有被更改,也不是问题。
推荐阅读
- java - 排序的文本文件数组缺少单词(Java)
- c++ - 我得到一个表达错误必须是可修改的
- python - 为什么不在布尔字典中理解为函数调用?
- r - 使用 group_by, R 识别价值随时间的变化
- sql - 有两个条件的 jaro-winkler
- arrays - 如何使用 C 找到子数组中所有元素的总和为 0 的最大子数组的长度我不知道错误在哪里.. 请任何人告诉我
- excel - Excel VBA 3704 错误(无法打开与 AdoDB 的连接)
- python-3.x - 按单元格值提取 excel 数据:python PANDAS
- html - 使用 Typescript/Angular 通过 RXJS 隐藏 HTML 元素
- r - PSM:从 r 中的 MachIT 包中提取组