2013-09-22 16 views
9

Come posso codificare in Java le seguenti linee python?Java equivalente a python tutto e qualsiasi

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

inb4 "Che cosa hai provato?"

Il modo mazza sarebbe scrivere il mio all e any metodi (e ovviamente un class to host them):

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

//other way round for all 

Ma io non intenzione di re-inventare la ruota e ci deve essere un modo accurato modo per farlo ...

risposta

7

any() è la stessa cosa di Collection#contains(), che è parte della libreria standard, ed è di fatto un metodo di tutte le implementazioni Collection esempio.

Tuttavia, non è presente un all() integrato. Il più vicino a te, a parte l'approccio "mazza", è Google Guava'sIterables#all().

+0

Grazie. Quindi inutile nelle stdlibs? – Hyperboreus

+0

Non per 'all()'. –

+3

Il mio cuore si riempie di tristezza e i miei occhi si riempiono di lacrime. Grazie. In attesa su CD per accettare. – Hyperboreus

3

In Java 7 e precedenti, non c'è nulla nelle librerie standard per farlo.

In Java 8, si dovrebbe essere in grado di utilizzare Stream.allMatch(...) o Stream.anyMatch(...) per questo genere di cose, anche se non sono sicuro che ciò sia giustificabile dal punto di vista delle prestazioni. (Tanto per cominciare, si avrebbe bisogno di utilizzare Boolean invece di boolean ...)

+0

Grazie per la risposta. Vediamo quando Java8 colpisce Dalvik. – Hyperboreus

4

Un esempio per Java 8 in streaming API sarebbe:

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

Una soluzione con la libreria di terze parti 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

Grazie per aver fornito il codice di esempio! –