【问题标题】:Java 8 - Stream - value update while collectingJava 8 - 流 - 收集时的值更新
【发布时间】:2018-11-30 06:03:36
【问题描述】:

扩展上一个问题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]

【问题讨论】:

  • ....map(name -&gt; preFix + "-&gt;" + MyClass.createReport(name, designation))..
  • 您在 SOF 中提出的问题。你已经给出了答案......这是什么prasad。

标签: java java-8 java-stream


【解决方案1】:

使用另一个map()

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

【讨论】:

    【解决方案2】:

    只需在调用前添加前缀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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      相关资源
      最近更新 更多