2013-09-22 12 views
9

Jak mogę kodować w Javie następujące linie python?Równowaga Java do Pythona, wszystkie i wszelkie

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

inb4 "Co próbowałeś?"

Sposób sanki-młot będzie pisać własne all i any metod (i oczywiście class to host them):

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

//other way round for all 

Ale nie planuję ponownego wymyślania koła i nie musi być schludny sposobem, aby to zrobić ...

Odpowiedz

7

any() to samo, co Collection#contains(), który jest częścią biblioteki standardowej, a w rzeczywistości jest metoda instancji wszystkich Collection wdrożeń.

Nie ma jednak wbudowanego all(). Najbliżej, poza podejściem "młota", jest Google Guava'sIterables#all().

+0

Dziękuję. Więc bez skutku w stdlibs? – Hyperboreus

+0

Nie dla "wszystkich()". –

+3

Moje serce wypełnia smutek, a moje oczy wypełniają się łzami. Dziękuję Ci. Oczekiwanie na CD do zaakceptowania. – Hyperboreus

3

W języku Java 7 i wcześniejszych wersjach nie ma w tym celu żadnych standardowych bibliotek.

W języku Java 8, powinieneś być w stanie użyć do tego celu Stream.allMatch(...) lub Stream.anyMatch(...), choć nie jestem pewien, czy byłoby to uzasadnione z perspektywy wydajności. (Na początek, trzeba by użyć Boolean zamiast boolean ...)

+0

Dziękuję za odpowiedź. Zobaczmy, kiedy Java8 trafi do dalvik. – Hyperboreus

4

przykład dla Javy 8 streamingu API byłoby:

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

Rozwiązanie z trzecim biblioteki partii 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

Dziękujemy za podanie przykładowego kodu! –

Powiązane problemy