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

我试图确定列表中的所有元素是否相同。 如:

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

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

这是我尝试过的,但没有用:

 public static boolean allElementsTheSame(List 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; } 

使用Stream API(Java 8+)

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

要么

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

使用Set

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

使用循环:

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

OP代码的问题

您的代码有两个问题:

  • 既然你要比较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; 

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

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

这是Stream.allMatch()方法的一个很好的用例:

boolean allMatch(谓词谓词)

返回此流的所有元素是否与提供的谓词匹配。

您甚至可以使您的方法通用,因此它可以与任何类型的列表一起使用:

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