创建类似自定义IntStream的类

时间:2015-10-08 21:45:18

标签: java java-8 java-stream

在Java 8中,您可以编写如下代码:

List<Integer> list = IntStream
    .range(0, 100)
    .boxed()
    .collect(Collectors.toCollection(ArrayList::new));

如何创建自定义XStream课程?例如,假设我有一个自然可以订购的类,你自然可以拥有一个对象的前辈和后继者。像:

public class PurchaseOrder {
    public long orderNumber;

    public PurchaseOrder(){
        orderNumber = 0L;
    }
}

然后,我可以有一个理论上的PurchaseOrderStream,您可以编写以下代码:

List<PurchaseOrder> list = PurchaseOrderStream
    .range(0, 100)
    .collect(Collectors.toCollection(ArrayList::new));

我怎么能这样做?我需要PurchaseOrderStreamextend / implement是否有任何类或接口?我不是在寻找完整的源代码(虽然这样会很好),但只是推动正确的方向。

1 个答案:

答案 0 :(得分:7)

最简单的方法就是使用现有的方法。我无法在这里看到任何重新发明轮子的理由。

例如,如果您编写了静态方法PurchaseOrder getFromId(long id),则可以执行

LongStream.range(0, 100).mapToObj(PurchaseOrder::getFromId)
                        .collect(Collectors.toCollection(ArrayList::new));

如果这不够短,你可以写一个方法

public static Stream<PurchaseOrder> range(long low, long high) {
    return LongStream.range(low, high).mapToObj(PurchaseOrder::getFromId);
}

然后你可以写

PurchaseOrder.range(0, 100).collect(Collectors.toCollection(ArrayList::new));