Java流API是否可以重复复制几次项目?
例如,假设我们有一个订单列表,其中每个订单都有产品代码和数量。我想获取一个包含n个给定代码副本的产品代码列表,其中n是数量。
当我有2个订单("product1" : 3x, "product2": 2x)
时,我希望得到这样的列表:("product1", "product1", "product1", "product2", "product2")
在没有旧的for
循环的情况下,是否有一种漂亮的方法可以做到这一点?
代码如下:
@Data
public class OrderRow {
private String productCode;
private int quantity;
}
答案 0 :(得分:6)
您可以将flatMap
与Collections.nCopies
一起使用:
public static List<String> products(List<OrderRow> orderRows) {
return orderRows.stream()
.flatMap(o -> Collections.nCopies(o.quantity, o.productCode).stream())
.collect(Collectors.toList());
}
答案 1 :(得分:0)
您需要使用Stream.flatMap()
并使用每一行的项目创建一个新流:
List<String> result = orderRows.stream()
.flatMap(row -> Stream.generate(row::getProductCode).limit(row.getQuantity()))
.collect(Collectors.toList());
您也可以使用此:
List<String> result = orderRows.stream()
.flatMap(row -> IntStream.range(0, row.getQuantity()).mapToObj(i -> row.getProductCode()))
.collect(Collectors.toList());