2013-09-22 35 views
9

Làm cách nào để mã trong Java các dòng python sau đây?Java tương đương với python tất cả và bất kỳ

a = [True, False] 
any (a) 
all (a) 

inb4 "Bạn đã làm gì cố gắng?"

Cách tạ-búa sẽ được viết riêng tôi allany phương pháp (và rõ ràng là một class to host them):

public boolean any (boolean [] items) 
{ 
    for (boolean item: items) 
     if (item) return true; 
    return false; 
} 

//other way round for all 

Nhưng tôi không có kế hoạch tái phát minh ra bánh xe và phải có một gọn gàng cách để làm điều này ...

Trả lời

7

any() là điều tương tự như Collection#contains(), mà phần của thư viện chuẩn, và thực chất là một phương pháp thể hiện của tất cả Collection triển khai.

Tuy nhiên, không có tích hợp sẵn all(). Gần nhất bạn sẽ nhận được, ngoài phương pháp "sledgehammer" của bạn, là Google Guava'sIterables#all().

+0

Cảm ơn bạn. Vì vậy, không có avail trong stdlibs? – Hyperboreus

+0

Không phải cho 'tất cả()'. –

+3

Trái tim tôi tràn ngập nỗi buồn và đôi mắt đầy nước mắt. Cảm ơn bạn. Đang chờ CD để chấp nhận. – Hyperboreus

3

Trong Java 7 trở về trước, không có gì trong thư viện chuẩn để thực hiện điều đó.

Trong Java 8, bạn sẽ có thể sử dụng Stream.allMatch(...) hay Stream.anyMatch(...) cho loại điều, mặc dù tôi không chắc chắn rằng đây sẽ là chính đáng từ góc độ hiệu suất. (Đối với một sự khởi đầu, bạn sẽ cần phải sử dụng Boolean thay vì boolean ...)

+0

Cảm ơn bạn đã trả lời. Hãy xem khi nào Java8 nhấn dalvik. – Hyperboreus

4

Một ví dụ cho Java 8 luồng API sẽ là:

Boolean[] items = ...; 
List<Boolean> itemsList = Arrays.asList(items); 
if (itemsList.stream().allMatch(e -> e)) { 
    // all 
} 
if (itemsList.stream().anyMatch(e -> e)) { 
    // any 
} 

Một giải pháp với các thư viện của bên thứ ba hamcrest:

import static org.hamcrest.Matchers.everyItem; 
import static org.hamcrest.Matchers.hasItem; 
import static org.hamcrest.Matchers.is; 

if (everyItem(is(true)).matches(itemsList)) { 
    // all 
} 
if (hasItem(is(true)).matches(itemsList)) { // here is() can be omitted 
    // any 
} 
+0

Cảm ơn bạn đã cung cấp mã ví dụ! –

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