Bạn sẽ luôn phải lặp lại. Tuy nhiên, bạn có thể sử dụng Java 8, 9 để làm đếm không lặp explicitely:
Iterable<Integer> newIterable =() -> iter;
long count = StreamSupport.stream(newIterable.spliterator(), false).count();
Dưới đây là một thử nghiệm:
public static void main(String[] args) throws IOException {
Iterator<Integer> iter = Arrays.asList(1, 2, 3, 4, 5).iterator();
Iterable<Integer> newIterable =() -> iter;
long count = StreamSupport.stream(newIterable.spliterator(), false).count();
System.out.println(count);
}
in này:
5
Thú vị đủ, bạn có thể parallelize hoạt động đếm tại đây bằng cách thay đổi cờ parallel
trên cuộc gọi này:
long count = StreamSupport.stream(newIterable.spliterator(), *true*).count();
Nguồn
2018-01-11 18:52:50
Trình lặp không nhất thiết phải tương ứng với một số "đếm" ... –
Bộ lặp là những gì chúng đang có; để lặp lại đối tượng tiếp theo của một bộ sưu tập (nó có thể là bất cứ thứ gì như tập hợp, mảng, v.v.) Tại sao chúng cần phải nói kích thước khi chúng không quan tâm đến những gì chúng đang cố lặp lại? 'để cung cấp phương thức độc lập để truy cập, trong đó người dùng không cần biết liệu triển khai cơ bản có là một dạng mảng hoặc danh sách được liên kết hay không và cho phép người dùng đi qua bộ sưu tập mà không lập chỉ mục rõ ràng.' http://penguin.ewu.edu/~trolfe/LinkedSort/Iterator.html – ecle