Java all determine elements are same in a list

a 夏天 提交于 2020-01-20 20:08:45

问题


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;
}

回答1:


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 Strings 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;



回答2:


The frequency of a value in a list will be the same as the size of the list.

boolean allEqual = Collections.frequency(templist, list.get(0)) == templist.size()




回答3:


This is a great use case for the Stream.allMatch() method:

boolean allMatch(Predicate predicate)

Returns whether all elements of this stream match the provided predicate.

You can even make your method generic, so it can be used with lists of any type:

static boolean allElementsTheSame(List<?> templist) {
    return templist.stream().allMatch(e -> e.equals(templist.get(0)));
}


来源:https://stackoverflow.com/questions/29288568/java-all-determine-elements-are-same-in-a-list

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!