怎么判断list中一个字段的值相等

fly丶fly 发布于 2016/03/27 17:13
阅读 6K+
收藏 0
从数据库中取出一个status字段存放在list中,如果所有status都相等执行下一步操作,所以怎么判断list中一个字段的值相等,求大神指教帮忙!
加载中
1
如比如比
如比如比
取出第一元素,遍历剩余所有元素,存在与第一个元素不相等(equals)的话立即返回false.
fly丶fly
fly丶fly
好的 谢谢
1
颖辉小居
颖辉小居

你可以新建一个Set  set=new HashSet();用 set.addAll(list);将list放到set中,最后比较set的size是否等于1,等于则全部都是重复的。不然就是至少两种不同的值。

参考:http://jun1986.iteye.com/blog/1101128

颖辉小居
颖辉小居
回复 @茶l壶 : 的确同时使用list和set性能就会差一点
如比如比
如比如比
可能有别的原因,使用了,list,如果最初使用的是set是比较快的,把list变成set再判断就不快了,还有如果只有一个元素时不知他是怎么定义的,没有比较对象的。
1
sxgkwei
sxgkwei

上面的都说了把数据拿到内存里,然后通过程序处理方式,实现你要的逻辑。

但为什么从一开始,你就要选择一条又耗时占用空间又多的策略呢?通过一条SQL语句不就搞定了吗?看如下结构:

select
(select count(1) from t )-
(select count(1) from t where status=1)
from dual

如果返回0,则说明status全部都是1,程序可以继续向下执行。当然你可能不是stauts=1,而是判断所有是否相等,那么:

select count(1) from (select status from t group by status) t

如果反馈1,则全部status是相等的。

综上,你可以选择适合的sql语句,一次性就让数据库判定出你要的结果,为什么非要选一个错误的方向来前进呢?

0
g
gshine

为什么用list,用set会不会更好。

0
zabcd117
zabcd117
在高级语言中,都有会class的Equal的重写或者struct重载“==”运算符。如果你要比较的是一个class或者struct,重写这个方法或者重载运算符就可以,这样在一个List<T>中遍历的时候,通过item[i] == desitem就可以判断是否相当,实际上最终还是走了你的自定义函数。
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部