Java所有确定列表中的元素是否相同

2022-09-01 03:27:00

我正在尝试确定列表中的所有元素是否都相同。如:

(10,10,10,10,10) --> true
(10,10,20,30,30) --> false

我知道哈希集可能会有所帮助,但我不知道如何用java编写。

这是我尝试过的那个,但没有工作:

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

使用 Stream API (Java 8+)

boolean allEqual = list.stream().distinct().limit(2).count() <= 1

boolean allEqual = list.isEmpty() || list.stream().allMatch(list.get(0)::equals);

使用套装

boolean allEqual = new HashSet<String>(tempList).size() <= 1;

使用循环:

boolean allEqual = true;
for (String s : list) {
    if(!s.equals(list.get(0)))
        allEqual = false;
}

OP代码问题

代码存在两个问题:

  • 由于您正在比较 s,因此应该使用 而不是 .String!templist.get(i).equals(first)!=

  • 你有,而它应该是return true;return flag;

除此之外,你的算法是合理的,但你可以通过做以下事情来逃脱:flag

String first = templist.get(0);
for (int i = 1; i < templist.size(); i++) {
    if(!templist.get(i).equals(first))
        return false;
}
return true;

甚至

String first = templist.get(0);
for (String s : templist) {
    if(!s.equals(first))
        return false;
}
return true;

答案 2

列表中值的频率将与列表的大小相同。

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