2017-01-11 30 views
7

Giả sử tôi có một số foreach vòng lặp như thế này:phát hiện foreach qua vòng lặp

Set<String> names = new HashSet<>(); 

//some code 

for (String name: names) { 

    //some code 

} 

Có cách nào để kiểm tra bên trong foreach rằng tên thực là người cuối cùng trong Set mà không có một quầy?

(Xin lỗi nếu đó là một câu hỏi trùng lặp, tôi không tìm thấy ở đây một số câu hỏi như thế này)

+5

Không, không có phương pháp như vậy trên giao diện Set. Sự trừu tượng đó không hàm ý một thứ tự, chỉ có đó là một Bộ sưu tập mà mọi phần tử là duy nhất. – duffymo

+0

Nếu không có truy cập, bạn chỉ đơn giản là không thể làm điều đó trong java. – abbath

+0

hãy cho biết, bạn muốn làm gì nếu biết phần tử hiện tại là phần tử cuối cùng. Hãy nhớ rằng, cho mỗi trên 'HashSet' sẽ không giữ trật tự. – Kent

Trả lời

6

Không có, hãy nhìn vào How does the Java 'for each' loop work?

Bạn phải thay đổi vòng lặp của bạn để sử dụng một iterator một cách rõ ràng hoặc một int truy cập.

+0

một trình vòng lặp thực sự có thể giúp tôi! cảm ơn. – mhery

0

Không có xây dựng trong phương pháp để kiểm tra xem phần tử hiện hành cũng là yếu tố cuối cùng. Bên cạnh đó bạn đang sử dụng HashSet không đảm bảo đơn hàng trả lại. Ngay cả khi bạn muốn kiểm tra, ví dụ: với chỉ mục i phần tử cuối cùng luôn có thể là một phần tử khác.

0

A Set không bảo đảm trật tự đối với các mục bên trong nó. Bạn có thể lặp lại thông qua Set một lần và truy xuất "abc" làm "mục cuối cùng" và lần tiếp theo bạn có thể thấy rằng "hij" là "mục cuối cùng" trong Set. Điều đó đang được nói, nếu bạn không quan tâm đến trật tự và bạn chỉ muốn biết "mục cuối cùng" tùy ý là khi quan sát Set tại thời điểm hiện tại, không có cách nào để thực hiện điều này. Bạn sẽ phải sử dụng bộ đếm.

4

Câu trả lời khác hoàn toàn phù hợp, chỉ cần thêm giải pháp này cho câu hỏi đã cho.

Set<String> names = new HashSet<>(); 

    //some code 
    int i = 0; 

for (String name: names) { 
    if(i++ == names.size() - 1){ 
     // Last iteration 
    } 
    //some code 

} 
+0

Cảm ơn. Giải pháp tốt cho mỗi vòng lặp để kiểm tra lần lặp cuối cùng. Mặc dù nó rất giống với việc sử dụng vòng lặp for với một trình lặp. Tuy nhiên, giải pháp tốt đẹp! – NiallMitch14

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