簡體   English   中英

Java流映射使用計數器創建對象

[英]Java stream map create objects with counter

我是Java及其流功能的新手。 如何使用流而不是循環實現此循環功能:

List<PackageData> packages = new ArrayList<>();
for(int i = 0; i < 100; i++) {
    PackageData packageData = ImmutablePackageData.builder()
            .withPackageGroup("ConstantString")
            .withPackageType("ConstantString")
            .withTrackingId("ConstantString" + i.toString())
            .withLocationId("ConstantString" + i.toString())
            .build();

    packages.add(packageData);
}

你可以使用IntStream ;

List<PackageData> packages = IntStream.range(0, 100)
     .mapToObj(i -> ImmutablePackageData.builder()
                .withPackageGroup("ConstantString")
                .withPackageType("ConstantString")
                .withTrackingId("ConstantString" + i)
                .withLocationId("ConstantString" + i)
                .build())
     .collect(Collectors.toList())

因為你的流只依賴於整數范圍[0, 100)

檢查IntStream#rangeIntStream#mapToObj

從jdk-9開始,您還可以使用stream.iterate()生成順序流

static <T> Stream<T> iterate​(T seed,
                         Predicate<? super T> hasNext,
                         UnaryOperator<T> next)

List<PackageData> packages = Stream.iterate(0, i->i<100, i->i+1)
                                   .map(i-> -> ImmutablePackageData.builder()
                                   .withPackageGroup("ConstantString")
                                   .withPackageType("ConstantString")
                                   .withTrackingId("ConstantString" + i)
                                   .withLocationId("ConstantString" + i)
                                   .build())
                            .collect(Collectors.toList())   

我使用Stream.iterate

List<PackageData> packages = Stream.iterate(0, (index) -> ImmutablePackageData.builder()
    .withPackageGroup("ConstantString")
    .withPackageType("ConstantString")
    .withTrackingId("ConstantString" + index)
    .withLocationId("ConstantString" + index)
    .build())
.limit(100)
.collect(Collectors.toList());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM