【问题标题】:How to add each element in of two list using stream api in java如何在java中使用stream api添加两个列表中的每个元素
【发布时间】:2022-08-17 17:53:42
【问题描述】:
partnersName =[\"partner1\",\"partner2\"];

totalDates = [\"2022-05-18\",\"2022-05-19\"];

两个列表都只存储字符串

这是下面的代码,它给出了我想要的输出

 for (int i = 0; i < partnersName.size(); i++) {
        if (totalDates.isEmpty()) {
            totalDates.add(partnersName.get(i));
        } else {
            for (int j = 0; j < totalDates.size(); j++) {
                totalDates.set(j, partnersName.get(i) +\"/\" +totalDates.get(j));
            }
        }
    }

输出 =[\"partner1/2022-05-18\",\"partner2/2022-05-18\",\"partner1/2022-05-19\",\"partner2/2022-05-19\"] ;

但我想使用流减少代码行。任何人都可以帮助获取流 API 代码

  • 你试过什么了?
  • 我对java完全陌生,你能帮帮我吗
  • 我想知道这样做的真正意图是什么?
  • 你的输出不是你的代码产生的。您的代码产生[partner2/partner1/2022-05-18, partner2/partner1/2022-05-19]
  • 然后只需删除所有换行符,您将只有一行,不能减少更多,但将难以阅读和维护 - 换句话说,非常糟糕的目标......更好的目标是更容易理解/阅读/maintain 代码(即使需要更多代码行——比如最好使用描述性变量名而不是单字母变量名)顺便说一句,使用流不一定会更快或使用更少的内存

标签: java stream java-stream


【解决方案1】:

假设结果 [partner1/2022-05-18, partner1/2022-05-19, partner2/2022-05-18, partner2/2022-05-19] 是您想要的:

List<String> result = partnersName.stream().<String>mapMulti((s, stringConsumer) -> totalDates.forEach(d -> stringConsumer.accept(s + "/" + d))).toList();

【讨论】:

  • 替代方案:partnersName.stream().map("/"::concat).flatMap(p -&gt; totalDates.stream().map(p::concat)).toList(); - 但不确定是否真的“这将是有帮助的“按照评论中的要求:-/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
  • 2013-04-08
  • 1970-01-01
相关资源
最近更新 更多