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());
这基本上是:
- 如果 non-zero,则将您的整数平面映射到自身流,如果等于零,则将其自身流和附加零
- 将列表的大小限制为原始大小
如果对您有帮助,您可以采纳此回答。
如果您正在使用 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]
考虑一下我有以下列表
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());
这基本上是:
- 如果 non-zero,则将您的整数平面映射到自身流,如果等于零,则将其自身流和附加零
- 将列表的大小限制为原始大小
如果对您有帮助,您可以采纳此回答。
如果您正在使用 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]