Java 8 - Stream - 在收集过程中更新值

3
在扩展之前的问题Java 8 - Calling a multi argument method from Collection.stream.map()中,我们如何在stream().map()处理后在collect()中更新值?
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]

1
....map(name -> preFix + "->" + MyClass.createReport(name, designation)).. - Jai
1
你在SOF上提出了问题,并且回答了自己的问题...这是什么意思,Prasad? - Lova Chittumuri
2个回答

4

使用另一个map()函数

System.out.println(
      names.stream()
           .map(name -> FolderDiffGenerator.createReport(name, 
                        designation))**
           .map(result -> preFix + "->" +result)**
           .collect(ArrayList::new, ArrayList::add, ArrayList::addAll));

1

只需在调用createReport之前添加前缀:

names.stream()
     .map(name -> preFix + "->" + MyClass.createReport(name, designation))
     .collect(ArrayList::new, ArrayList::add, ArrayList::addAll);

另外,.collect(ArrayList::new, ArrayList::add, ArrayList::addAll); 可以简化为 .collect(toCollection(ArrayList::new));:

names.stream()
     .map(name -> preFix + "->" + MyClass.createReport(name, designation))
     .collect(toCollection(ArrayList::new));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接