如何使用java中的流API添加两个列表中的每个元素

问题描述 投票:0回答:3
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 stream java-stream
3个回答
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();

1
投票

还有一种方法可以

List<String> result = partnersName.stream()
                        .flatMap(x -> totalDates.stream().map(y -> x.concat("/"+y)))
                        .collect(Collectors.toList());

//output: [partner1/2022-05-18, partner1/2022-05-19, partner2/2022-05-18, partner2/2022-05-19]

0
投票

这是一种方法。

List<String> partnerName = List.of("partner1","partner2");
List<String> totalDates = List.of("2022-05-18","2022-05-19");

List<String> result = partnerName.stream()
        .flatMap(name -> totalDates.stream()
                .map(date->String.join("/", name, date)))
        .toList();
    
System.out.println(result);

打印

[partner1/2022-05-18, partner1/2022-05-19, partner2/2022-05-18, partner2/2022-05
-19]
  • 上面使用嵌套流来处理每个List。
  • String.join
    - 采用分隔符和可变数量的参数并将它们连接起来,由分隔符分隔。
  • flatMap
    将嵌套流展平为一个以转换为列表。
© www.soinside.com 2019 - 2024. All rights reserved.