如何防止或删除ValueListBox中的重复值

时间:2014-04-08 16:22:33

标签: java gwt

我们的gwt应用使用ValueListBox

records.setValue(model);
records.setAcceptableValues(models);

modelmodels的子集。我遇到的问题是ValueListBox包含重复的值。如何预防或删除它?

3 个答案:

答案 0 :(得分:4)

尝试使用以下内容。

records.setAcceptableValues(new HashSet<String>(models); 

如果它是用户定义的对象而不是字符串等,那么你必须实现hashcode和equals。

答案 1 :(得分:2)

覆盖setAcceptableValues方法

@Override
public void setAcceptableValues(Collection<T> newValues) {
   super.setAcceptableValues(new HashSet<T>(newValues));
}

示例代码:

ValueListBox<Integer> semester = new ValueListBox<Integer>(new Renderer<Integer>() {
    public String render(Integer object) {
        String s = "";
        if (object != null) {
            s = object.toString();
        }
        return s;
    }

    public void render(Integer object, Appendable appendable) throws IOException {
        String s = render(object);
        appendable.append(s);
    }
}) {
    @Override
    public void setAcceptableValues(Collection<Integer> newValues) {
        super.setAcceptableValues(new HashSet<Integer>(newValues));
    }
};

semester.setAcceptableValues(Arrays.asList(1, 1, 3, 3, 2, 2, 3, 4, 5, 7, 8, 9, 1, 3, 2));
semester.setValue(2);

- 编辑 -

根据您的上一条评论,试试这个

class MyModel {
    private String id;
    private String name;

    public MyModel(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public int hashCode() {
        return this.id.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof MyModel) {
            return this.id.equals(((MyModel) obj).id);
        }
        return false;
    }
}

ValueListBox<MyModel> semester = new ValueListBox<MyModel>(new Renderer<MyModel>() {
    public String render(MyModel object) {
        String s = "";
        if (object != null) {
            s = object.getName();
        }
        return s;
    }

    public void render(MyModel object, Appendable appendable) throws IOException {
        String s = render(object);
        appendable.append(s);
    }
}) {
    @Override
    public void setAcceptableValues(Collection<MyModel> newValues) {
        super.setAcceptableValues(new HashSet<MyModel>(newValues));
    }
};

semester.setAcceptableValues(Arrays.asList(new MyModel("1", "a"), new MyModel("1", "a"),
        new MyModel("2", "b"), new MyModel("3", "c")));
semester.setValue(new MyModel("1", "a"));

答案 2 :(得分:0)

没有方法可以阻止或删除ListBox或ValueListBox中的重复选项。在将它们传递给ValueListBox之前,必须删除重复的值。