两个List中存在一个元素

时间:2016-05-05 10:51:47

标签: java swing

我想验证两个显示问题的JTable中是否存在元素 该程序是当我点击第一个列表中的问题时,它将被转移到第二个JTable,但我不想添加重复限制,所以我不希望在第二个列表中添加两次问题我想要添加控件是否会添加用户无法再添加第二次

table = new JTable();
    table.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent arg0) {
            for (int i = 0; i < questions2.size(); i++) {
            /* the control code */  
                Question selected=questions.get(table.getSelectedRow());
                questions2.add(selected);
                questions.remove(selected);
                initDataBindings();
            } 


        }
    });

My Result

I do not want this

2 个答案:

答案 0 :(得分:0)

使用Set。假设您有第一个列表:

List<Question> questions1 = new ArrayList<Question>();

现在,问题必须有这样的方法:

@Override
public int hashCode() {
     // Let your IDE generates it based on variables
}

@Override
public boolean equals() {
     // Let your IDE generates it based on variables
}

使用此方法,Set将能够确定存储所需的两个Questionequal,还是创建hashCode。最好的方法是,如果你有唯一的id,但其他东西可以帮助。如果您在答案中添加Question课程,我可以帮助您确定equals()hashCode()方法的最佳实施方式。

现在,您将它们放在HashSet中,因为用户会执行某些操作:

HashSet<Question> questionsSet = new HashSet<Question>();
boolean isPresentInList = questionsSet.contains(question);
questionsSet.add(question);

方法包含将检查questionsSet中是否存在该问题。 add将检查其中是否存在相同的问题,由equals()方法中的规则定义,如果是,则会覆盖它,否则它只会添加。这样,questionsSet中就不会有重复项了。 现在,当您需要questionsSet的arrayList时,请执行以下操作:

List<Question> questions2 = Arrays.asList(questionsSet);

答案 1 :(得分:0)

因为你在问题中使用Jtables, 如果值不存在,您需要先检查jtable中是否存在该值,然后将其添加到jtable中。在您提交的代码中,您不会检查该值是否存在。

    public boolean ifExists(JTable table,string entry) {


    int rowCount = table.getRowCount();
    int columnCount = table.getColumnCount();


    for (int i = 0; i < rowCount; i++) {
        String value = "";
        for (int j = 0; j < columnCount; j++)
            value = value + " " + table.getValueAt(i, j).toString();
        if (value.equalsIgnoreCase(entry)) {
            return true;
        }
    }
    return false;
}

在上面的代码中使用for循环检查数据是否存在。 它将迭代jtable并在值存在时返回true。 如果返回值为false,则可以继续添加数据。尝试使用上面的代码。