28

I have an ArrayList<Integer>. I want to check if all elements of the list are greater then or less then certain condition. I can do it by iterating on each element. But I want to know if there is any method in Collection class to get the answer like we can do to find maximum or minimum with Collections.max() and Collections.min() respectively.

2
  • If i'm not wrong, Collections.max() and Collections.min() also iterate through each element. Commented Jun 19, 2014 at 10:19
  • max and min make no sense per se, because Collection is a generic type. for instance if you have Collection<Object>, what would be max and min? take a look here: stackoverflow.com/questions/122105/… Commented Jun 19, 2014 at 10:20

4 Answers 4

66

If you have java 8, use stream's allMatch function (reference):

 ArrayList<Integer> col = ...; col.stream().allMatch(i -> i>0); //for example all integers bigger than zero 
Sign up to request clarification or add additional context in comments.

5 Comments

Didn't know about this, seems useful! :D
very useful..something new to me..Thanks
I am not getting how to use this predicate and pass it in to argument. Can anyone give me demo ?
Still useful and saves lives four years later :D
Should probably be noted that the above solution will return true for an empty list.
8

You can use Google guavas Iterables.all

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

Comments

0

You cannot check values without iterating on all elements of the list.

for(Integer value : myArrayList){ if(value > MY_MIN_VALUE){ // do my job } } 

I hope this will help

1 Comment

I want to do my job only if all elements of list > of my condition
0

The answer col.stream().allMatch is the best solution for the original task, i.e. to check if all elements fulfill some condition.

If you instead want to find the min or max int value of a Stream/Collection you must first convert it to an IntStream using col.stream().mapToInt(ToIntFunction) where the ToIntFunction can be MyObject::getIntvalue or o -> o.getIntValue() or Integer::intValue if you already have a List<Integer> as explained on How do I get an IntStream from a List<Integer>?

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.