Java 8 流 api 根据保持列表大小相同的条件向列表添加元素的代码

Java 8 stream api code to add a element to a List based on condition keeping the list size same

考虑一下我有以下列表

List<Integer> alist = new ArrayList<>(); 
          list=Arrays.asList(0,1,2,0,4,10);
          
          alist.addAll(list);

我希望输出为 0 0 1 2 0 0。

这意味着如果列表中有一个零,则在列表中再添加一个零。这样做直到列表的大小与输入大小相同。

如何使用 Java 8 流 api 完成此操作?

您可以通过执行以下操作实现此目的:

alist.stream()
    .flatMap(i -> i == 0 ? Stream.of(i, 0) : Stream.of(i))
    .limit(alist.size())
    .collect(Collectors.toList());

这基本上是:

  1. 如果 non-zero,则将您的整数平面映射到自身流,如果等于零,则将其自身流和附加零
  2. 将列表的大小限制为原始大小

如果对您有帮助,您可以采纳此回答。

如果您正在使用 Java 16+ 也可以使用 mapMulti 来做到这一点,它允许用零个或多个元素替换流中的项目。

List<Integer> alist = Arrays.asList(0,1,2,0,4,10);
  • 在这种情况下,mapMulti 简单地接受当前值并且
  • 如果当前值为 0,则添加另一个 0
alist = alist.stream().<Integer>mapMulti((i, consumer) -> {
    consumer.accept(i);
    if (i == 0) {
        consumer.accept(0);
    }
}).limit(alist.size()).toList();

System.out.println(alist);

打印

[0, 0, 1, 2, 0, 0]