Nếu bạn đang sử dụng bất kỳ cấu trúc dữ liệu nào triển khai java.util.List
bạn có thể thực hiện collection.subList(0, 100)
trên đó. Trong đó 0 là chỉ số bắt đầu và 100 là kết thúc. Sau đó bạn sẽ chuyển bộ sưu tập mới vào collect()
.
Dưới đây là một ví dụ sử dụng một đối tượng mà kéo dài java.util.Iterator
:
public class LimitIterator implements Iterator, Iterable {
private it
private limit
private count
LimitIterator(Iterator it, int limit) {
limit = limit;
count = 0;
it = it
}
boolean hasNext(){
return (count >= limit) ? false : it.hasNext()
}
Object next() {
if (!hasNext()) throw new java.util.NoSuchElementException()
count++
return it.next()
}
Iterator iterator(){
return this;
}
void remove(){
throw new UnsupportedOperationException("remove() not supported")
}
}
// Create a range from 1 to 10000
// and an empty list.
def list = 1..10000
def shortList = []
// Ensure that everything is as expected
assert list instanceof java.util.List
assert list.iterator() instanceof java.util.Iterator
assert list.size() == 10000
assert shortList instanceof java.util.List
// Grab the first 100 elements out of the lists iterator object.
for (i in new LimitIterator(list.iterator(), 100)) {
shortlist.add(i);
}
assert shortlist.size() == 100
Đáng tiếc là nó không phải là một danh sách –
@ Matt có lẽ bạn có thể gọi 'ToList() 'hoặc' như List' để chuyển nó sang một danh sách –
Tôi lo lắng rằng cuối cùng có thể đọc toàn bộ iterator vào bộ nhớ –