I am trying to determine to see if all elements in a list are same. such as:
(10,10,10,10,10) --> true
(10,10,20,30,30) --> false
I know hashset might be helpful, but i don't know how to write in java.
this is the one I've tried, but didn't work:
public static boolean allElementsTheSame(List<String> templist)
{
boolean flag = true;
String first = templist.get(0);
for (int i = 1; i< templist.size() && flag; i++)
{
if(templist.get(i) != first) flag = false;
}
return true;
}
Using the Stream API (Java 8+)
boolean allEqual = list.stream().distinct().limit(2).count() <= 1
or
boolean allEqual = list.isEmpty() || list.stream().allMatch(list.get(0)::equals);
Using a Set
:
boolean allEqual = new HashSet<String>(tempList).size() <= 1;
Using a loop:
boolean allEqual = true;
for (String s : list) {
if(!s.equals(list.get(0)))
allEqual = false;
}
Issues with OP's code
Two issues with your code:
Since you're comparing String
s you should use !templist.get(i).equals(first)
instead of !=
.
You have return true;
while it should be return flag;
Apart from that, your algorithm is sound, but you could get away without the flag
by doing:
String first = templist.get(0);
for (int i = 1; i < templist.size(); i++) {
if(!templist.get(i).equals(first))
return false;
}
return true;
Or even
String first = templist.get(0);
for (String s : templist) {
if(!s.equals(first))
return false;
}
return true;