2014-06-19 5 views
12

Mam ArrayList<Integer>. Chcę sprawdzić, czy wszystkie elementy listy są większe lub mniejsze niż określony warunek. Mogę to zrobić przez powtarzanie każdego elementu. Ale chcę wiedzieć, czy istnieje jakakolwiek metoda w klasie Collection, aby uzyskać odpowiedź, tak jak możemy zrobić, aby znaleźć maksymalne lub minimalne z odpowiednio Collections.max() i Collections.min().jak sprawdzić, czy wszystkie elementy kolekcji java pasują do jakiegoś warunku?

+0

Jeśli się nie mylę, Collections.max() i Collections.min() również iterację każdy element. –

+0

'max' i' min' nie mają sensu per se, ponieważ 'Collection' jest typem ogólnym. na przykład, jeśli masz 'Collection ', co byłoby 'max' i' min'? zajrzyj tutaj: http://stackoverflow.com/questions/122105/what-is-the-best-way-to-filter-a-java-collection – logoff

Odpowiedz

25

Jeśli masz java 8, allMatch funkcji Użyj Stream (reference):

ArrayList<Integer> col = ...; 
col.stream().allMatch(i -> i>0); //for example all integers bigger than zero 
+0

Nie wiedziałem o tym, wydaje się przydatne! : D –

+0

bardzo przydatne .. coś nowego dla mnie .. Dzięki – Chirag

+0

Nie otrzymuję sposobu korzystania z tego predykatu i przekazać go do argumentu. Czy ktoś może mi dać demo? – Chirag

1

Nie można sprawdzić wartości bez powtarzanie wszystkich elementów listy.

for(Integer value : myArrayList){ 

    if(value > MY_MIN_VALUE){ 
     // do my job 
    } 
} 

Mam nadzieję, że to pomoże

+0

Chcę wykonać moją pracę tylko, jeśli wszystkie elementy listy> mojego stanu – Chirag

5

Można użyć Google guavas Iterables.all

Iterables.all(collection, new Predicate() { 
    boolean apply(T element) { 
     .... //check your condition 
    } 
}