java - Java 8 - 流 - 收集时的值更新
问题描述
在扩展上一个问题Java 8 - Calling a multi argument method from Collection.stream.map()中,我们如何在处理collect()
后收集时更新值stream().map()
?
String designation = "Engineer";
String preFix = "PRE_FIX";
List<String> names = new ArrayList<>();
names.add("ABC");
names.add("DEF");
names.add("GHI");
System.out.println(
names.stream()
.map(name ->
MyClass.createReport(name, designation))
.collect(ArrayList::new, ArrayList::add, ArrayList::addAll));
public static String createReport(String name, String designation) {
return ("Name:" + name + " - Designation:" + designation);
}
输出:
[Name:ABC - Designation:Engineer, Name:DEF - Designation:Engineer,
Name:GHI - Designation:Engineer]
预期的:
[PRE_FIX->Name:ABC - Designation:Engineer, PRE_FIX->Name:DEF -
Designation:Engineer, PRE_FIX->Name:GHI - Designation:Engineer]
解决方案
使用另一个map()
System.out.println(
names.stream()
.map(name -> FolderDiffGenerator.createReport(name,
designation))**
.map(result -> preFix + "->" +result)**
.collect(ArrayList::new, ArrayList::add, ArrayList::addAll));
推荐阅读
- vulkan - Vulkan 的静态和动态链接有什么区别,vkGetInstanceProcAddress 的作用有什么不同?
- excel - 使用 msoConnectorType 创建虚线
- python - 在 python 中使用 selenium 时如何处理谷歌浏览器确认警报?
- coverity - 覆盖率。配置为忽略源代码的某些部分
- angular - 在 Angular 中导入 RxJS 运算符时出错
- linux - 如何在免费标记模板中有条件地设置环境变量
- html - 为什么我的媒体查询即使编写正确也不起作用
- docker - 如何限制 docker 网络使用?
- java - 使用 freemarker(ftl 模板)通过 spring 发送 Outlook 电子邮件的自定义表单
- c# - c# 在计时器滴答声中想要计数++ 0 到 30,然后一次又一次地计数 -- 30 到 0。怎么做?