List<Integer> integer = Stream.generate(new Supplier<Integer>() {
int i = 0 ;
@Override
public Integer get() {
return ++i;
}
}).filter(j -> j < 5)
.limit(10) // Note the call to limit here
.collect(Collectors.toList());
Phản đối kỳ vọng của tôi, cuộc gọi collect
không bao giờ trở lại. Thiết lập limit
trước khi filter
tạo ra kết quả mong đợi. Tại sao?Tại sao Stream.limit không hoạt động như mong đợi trong đoạn mã này?
Bằng cách này, bạn có thể sử dụng 'Stream.iterate (1, i -> i + 1) .filter (...) ...' thay vì nhà cung cấp sôi nổi này. –
@AlexisC. Tôi không biết API này. Cảm ơn! – Vitaliy
Hoặc tốt hơn, IntStream.range(). –