java - Java 8 按具有不同分隔符的第一个字符串属性分组
问题描述
从一个对象并通过 Java 8 流/收集器功能,我想创建一个由 2 个不同分隔符组成的字符串。“/”分隔同一类的选项,分隔不同的类。
预期输出结果:
AJOUT option1 test / AJOUT option3 test </br>
SUPPRESSION option2 test </br>
MODIFICATION option4 test / MODIFICATION option5 test
备注:
大写单词(AJOUT, SUPPRESSION, MODIFICATION)是类别,用method检索
option.getAction().getLabel()
其余单词代表选项(例如:“option1 test”是选项名称)并通过方法检索
option.getLabel()
这是我的尝试:
1- 用“/”分隔所有选项
String description = orderCapture.getSelectedOptions().stream()
.map(option -> String.format("%s %s", option.getAction().getLabel(), option.getLabel()))
.collect(Collectors.joining(" / "));
结果
AJOUT option1 test / SUPPRESSION option2 test / AJOUT option3 test / MODIFICATION option4 test / MODIFICATION option5 test
2- 用“ <br/>
”(</br>
)分隔所有选项
String description = orderCapture.getSelectedOptions().stream()
.map(option -> String.format("%s %s", option.getAction().getLabel(), option.getLabel()))
.collect(Collectors.joining(" <br/> "));
结果
AJOUT option1 test </br> SUPPRESSION option2 test </br> AJOUT option3 test </br> MODIFICATION option4 test </br> MODIFICATION option5 test
3-我的最后一次尝试是用 br 标签分隔类别,但它不起作用
String description = orderCapture.getSelectedOptions().stream()
.map(option -> String.format("%s %s", option.getAction().getLabel(), option.getLabel()))
.collect(Collectors.groupingBy(option -> option.getAction().getLabel()),
Collectors.joining(" <br/> "));
结果
日食错误:
类型不匹配:无法从 Collector>> 转换为 Supplier
Stream 类型中的方法 collect(Supplier, BiConsumer, BiConsumer) 不适用于参数 (Collector>>, Collector)
任何帮助将不胜感激,谢谢。
解决方案
您可能已经注意到,您的第一个实现对于遍历列表Option
是否正确分组很有用。因此,将其用作下面的实用方法-
private static String describeSimilarActions(List<Option> options) {
return options.stream()
.map(option -> String.format("%s %s", option.getAction().getLabel(), option.getLabel()))
.collect(Collectors.joining(" / "));
}
然后Action
按预期根据标签进行分组以提供适当的换行符可以帮助如下:
String description = orderCapture.getSelectedOptions().stream()
.collect(Collectors.groupingBy(op -> op.getAction().getLabel())) // this
.values().stream()
.map(opList -> describeSimilarActions(opList)) // reuse
.collect(Collectors.joining("\n"));
推荐阅读
- javascript - 有没有办法扩展 JavaScript 调用堆栈的大小?
- python - 当我尝试让 python 将用户输入写入 txt 文件时,它不会
- python - 想要使用 pandas 和 sqlalchemy 从查询是变量(不和谐用户名)的数据库中全选
- java - JavaFX - FXML 文件中的自定义对象
- javascript - 无需回发 ASP.NET MVC 即可刷新图片库
- flutter - Flutter - 解析本地 JSON 的问题
- asp.net-mvc - 使用局部视图出错(@Html.Partial("SchemeDetails")) System.Collections.Generic.IEnumerable`1[MutualFund.Models.SchemeClass]'
- python - 将 Python 连接到 Access 2016:“数据库......需要更新版本的 Microsoft Access”
- flutter - 如何在颤动中从 Firestore 数字格式中获得双倍
- reactjs - Reactjs 中的 SOCKET.ON