作者:爱啊诗的孩子 | 来源:互联网 | 2023-05-16 10:36
我试图确定列表中的所有元素是否相同.如:
(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
aioobe..
75
使用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
s,你应该使用!templist.get(i).equals(first)
而不是!=
.
你有return true;
它应有的时间return flag;
除此之外,你的算法是合理的,但你可以在没有flag
这样做的情况下逃脱:
String first = templist.get(0);
for (int i = 1; i
甚至
String first = templist.get(0);
for (String s : templist) {
if(!s.equals(first))
return false;
}
return true;
darrenp..
7
列表中值的频率将与列表的大小相同.
boolean allEqual = Collections.frequency(templist, list.get(0)) == templist.size()
1> aioobe..:
使用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
s,你应该使用!templist.get(i).equals(first)
而不是!=
.
你有return true;
它应有的时间return flag;
除此之外,你的算法是合理的,但你可以在没有flag
这样做的情况下逃脱:
String first = templist.get(0);
for (int i = 1; i
甚至
String first = templist.get(0);
for (String s : templist) {
if(!s.equals(first))
return false;
}
return true;
@ PM77-1,对于`(1,2,3,4,5)`列表,`limit(2)`将确保它在`(1,2)`之后提前终止.
它对具有许多独特元素的大型列表产生了影响.例如考虑`("0000000001","000000002",......,"999999999")`.查看两个第一个元素显然更快,然后必须计算总共有多少个独特元素.
2> darrenp..:
列表中值的频率将与列表的大小相同.
boolean allEqual = Collections.frequency(templist, list.get(0)) == templist.size()