2013-07-03 60 views
13

Trong Ruby, tôi có thể làm một cái gì đó như:lặp qua mảng tĩnh trong java mà không mảng biến

["FOO", "BAR"].each do { |str| puts str } 

iterating trên một mảng được xác định trong báo cáo mà tôi đang sử dụng nó. Kể từ khi tôi có thể định nghĩa một mảng trong Java thích:

String[] array = { "FOO", "BAR" }; 

Tôi biết tôi có thể tránh được định nghĩa biến bằng cách thiết lập một vòng lặp như:

for (String str : new String[] { "FOO", "BAR" }) { ... } 

Nhưng, tôi đã hy vọng java có thể có một cái gì đó ngắn gọn hơn , kHÔNG xác định một biến có chứa các mảng đầu tiên, và cũng cho phép tôi để tránh việc phân bổ năng động, là có một cú pháp như sau:

for (String str : { "FOO", "BAR" }) { ... } 

T mũ là terse hơn mà sẽ làm việc với Java mà tôi là mất tích, hoặc là giải pháp tôi đã có trên lựa chọn duy nhất của tôi?

+1

Câu hỏi hay. Nó sẽ là thú vị để xem nếu có bất kỳ cách nào dễ dàng hơn để xác định cấu trúc dữ liệu chữ. – feralin

+1

Chỉ tìm thấy câu hỏi này (gần như giống hệt) khi lướt web: http://stackoverflow.com/questions/2358866/java-anonymous-array-in-for-each-loop?rq=1 – Xaq

Trả lời

7

Điều tốt nhất bạn có thể làm là

for(String s : Arrays.asList("a", "b")) { 
     System.out.println(s); 
    } 

java.util.Arrays đưa ra một phương pháp asList(...) mà là một phương pháp var-arg, và nó có thể được sử dụng để tạo List (đó là mảng động) trên bay.

Bằng cách này bạn có thể tuyên bốlặp trên một mảng trong cùng một tuyên bố

+0

phù hợp với tôi +1 –

+0

làm việc cho tôi quá, câu trả lời tốt nhất cho đến nay – Xaq

0

Ngôn ngữ như Java đang cực kỳ tiết so với ngôn ngữ ngắn gọn như Ruby. Có vẻ đối với tôi giống như những gì bạn đã có là đặt cược tốt nhất của bạn:

for (String str : new String[] { "FOO", "BAR" }) { ... } 
6

Trong Java 8, bạn sẽ có thể làm như sau:

Stream.of("FOO", "BAR").forEach(s -> System.out.println(s)); 

này sử dụng java.util.stream gói mới và lambda expressions.

+0

Cảm ơn - Tôi nghĩ Java8 có thể thêm một cái gì đó như thế. – Xaq

1

Tôi nghĩ câu hỏi của bạn là về đường cú pháp cho các bộ sưu tập nhiều như bất cứ thứ gì. Tuy nhiên, trong Java 8 bạn có thể nói

Arrays.asList("a", "b").forEach(System.out::println);

nơi bạn có thể thay thế tất nhiên phương pháp riêng của bạn theo nghĩa đen đó là tương thích với Consumer<T>.

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