2013-09-22 18 views
9

Java'yı aşağıdaki python satırlarında nasıl kodlarım? "Eğer denedi nedir?"Java python'a eşdeğer ve hepsi

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

inb4

kızak-çekiç yolu (besbelli ve class to host them) Kendi all ve any yöntemleri yazıyor olacağını:

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

//other way round for all 

Ama yeniden icat tekerlek üzerinde düşünmüyorsanız ve düzgün bir olmalı bunu yapmanın yolu ...

cevap

7

any()standart kütüphanenin parçasıdır Collection#contains() aynı şey, ve aslında tüm Collection uygulamalarının bir örneği yöntemidir. Ancak, all() yerleşik . "Balyoz" yaklaşımınızın yanı sıra en yakın, Google Guava'sIterables#all().

+0

Teşekkür ederim. Yani stdlibs hiçbir boşuna? – Hyperboreus

+0

'all()' için değil. –

+3

Kalbim hüzünle doldu ve gözlerim gözyaşlarıyla doldu. Teşekkür ederim. Kabul için CD'yi bekliyorum. – Hyperboreus

3

Java 7 ve öncesinde, bunu yapmak için standart kitaplıklarda hiçbir şey yoktur.

Java 8'de, bu tür bir şey için Stream.allMatch(...) veya Stream.anyMatch(...) kullanabilmeniz gerekir, ancak bunun performans açısından haklı olabileceğinden emin değilim. olacağını

+0

Cevabınız için teşekkür ederiz. Java8'in dalvik'e vurduğunu görelim. – Hyperboreus

4

Java 8 akış API örneği (Başlangıç ​​için, sen ... boolean yerine Boolean kullanmak gerekecektir):

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

üçüncü taraf kitaplığında hamcrest sahip bir çözüm:

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

Örnek kod sağladığınız için teşekkür ederiz! –