我需要一种简单的方法来比较以下内容:
co1 = getvalue(c1) ;
co2 = getvalue(c2) ;
co3 = getvalue(c3) ;
co4 = getvalue(c4) ;
co5 = getvalue(c5) ;
co6 = getvalue(c6) ;
变量co1,co2,c3等从组合框中填充的值。我不希望用户两次选择相同的项目。我需要验证这些。只要值不相等,就继续执行程序..
答案 0 :(得分:5)
无论co1
,...,co6
有哪种类型,我都假设它正确实现了equals
和hashCode
。
一种方法是使用Collections API,如下所示:
List<COType> coList = Arrays.asList(co1, co2, co3, co4, co5, co6);
if (new HashSet<COType>(coList).size() == coList.size()) {
// no two elements are equal.
}
如果您认为这不是非常易读,您可以像这样手动完成:
boolean areAnyTwoEqual(COType... co) {
for (int i = 0; i < co.length-1; i++)
for (int j = i+1; j < co.length; j++)
if (co[i].equals(co[j]))
return true;
return false;
}
并使用
调用该函数if (!areAnyTwoEqual(co1, co2, co3, co4, co5, co6)) {
// no two elements are equal
}
答案 1 :(得分:2)
将它们全部添加到Set
,其中不能包含重复的条目。然后,如果Set.size()
返回6
,您就知道所有值都是不同的。
示例:
Set s = new HashSet();
s.add(c1);
...
s.add(c6);
if (s.size() == 6)
// proceed
else
// fail
答案 2 :(得分:2)
HashSet<?> set = new HashSet<?>();
for (? co : new ?[]{co1, co2, ...}){
if (!set.add(co)){
// duplicate element
}
}
如果无法添加元素,则 Set.add
将返回false,因为它已存在于集合中。用它来确定重复的元素。
答案 3 :(得分:1)
最简单的方法是将它们存储在一个数组中并迭代地比较它们
boolean allDifferent = true;
Object[] values = {getValue(c1), getValue(c2), ...};
for (int i = 0; i < values.length - 1; ++i)
for (int j = i+1; j < values.length; ++j)
if (values[i].equals(values[j])
allDifferent = false;
但我个人使用Set
(如果它浪费了分配),或者在选择一个项目时从组合框中删除该项目(例如,如果您选择{{ 1}}从cb2然后你从其他人中删除该项目。)
答案 4 :(得分:1)
假设我们可以迭代c1..c6
,这样就可以了:
Set<Type> temp = new HashSet<Type>();
for(Combobox box:boxes) {
if (!temp.add(getValue(box)) {
// duplicate entry - omit error message
break;
}
}
答案 5 :(得分:0)
如果这些值来自JComboBox
,为什么不从ComboBox2中删除ComboBox 1的选定项目以及从ComboBox1中删除ComboBox2的选定项目?