2008-12-12 31 views

Trả lời

44

Iterable<String> là tương đương với IEnumerable<string> .

Nó sẽ là một sự kỳ quặc trong hệ thống kiểu nếu mảng được triển khai Iterable. String[] là phiên bản Object[], nhưng Iterable<String> không phải là Iterable<Object>. Các lớp và các giao diện không thể nhân thực hiện cùng một giao diện chung với các đối số chung khác nhau.

String[] sẽ hoạt động giống như Iterable trong vòng lặp nâng cao.

String[] có thể dễ dàng biến thành một Iterable:

Iterable<String> strs = java.util.Arrays.asList(strArray); 

thích bộ sưu tập trên mảng (đối với phi nguyên thủy anyway). Mảng của các kiểu tham chiếu có một chút lẻ và hiếm khi cần thiết kể từ Java 1.5.

+2

Để biết thêm thông tin về _why_ bạn không thể truyền giữa Iterable và Iterable , hãy xem [hiệp phương sai và contravariance] (http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29). –

+0

Được rồi, vì vậy bây giờ hãy giải quyết con khỉ đột 500 lb trong phòng. Làm thế nào để bạn sử dụng 'Iterable '? - câu lệnh 'return return' tương đương trong Java là gì? – BrainSlugs83

+0

@ BrainSlugs83 Tôi nghĩ đó là một câu hỏi khác. –

8

Bạn đang tìm kiếm Iterable<String>?

Iterable<T> <=> IEnumerable<T> 
Iterator<T> <=> IEnumerator<T> 
2

Tôi tin tương đương Java là Iterable<String>. Mặc dù String[] không thực hiện nó, bạn có thể vòng qua các yếu tố anyway:

String[] strings = new String[]{"this", "that"}; 
for (String s : strings) { 
    // do something 
} 

Nếu bạn thực sự cần một cái gì đó mà thực hiện Iterable<String>, bạn có thể làm điều này:

String[] strings = new String[]{"this", "that"}; 
Iterable<String> stringIterable = Arrays.asList(strings); 
0

Iterable<T> là OK, nhưng có một vấn đề nhỏ. Nó không thể được sử dụng dễ dàng trong stream() tức là biểu thức lambda.

Nếu bạn muốn như vậy, bạn sẽ nhận được dấu phân cách và sử dụng lớp StreamSupport().

Các vấn đề liên quan