2014-04-08 2 views
2
에서 중복 값 (들)을 제거하는 방법

우리의 GWT 응용 프로그램은, modelmodels의 하위 집합입니다예방 또는 ValueListBox

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

ValueListBox 사용합니다. 내가 겪고있는 문제는 ValueListBox에 중복 된 값이 포함되어 있다는 것입니다. 어떻게 예방하거나 제거합니까?

+1

사용해보세요. records.setAcceptableValues ​​(new HashSet (models); 문자열 등이 아닌 사용자 정의 된 객체 인 경우 해시 코드와 같음을 구현해야합니다. – bgth

+0

@bgth 답으로 입력하십시오. 올바른 것입니다. 방금 동일한 작업을 수행했습니다. – Braj

+0

답안과 대답 사이에는 한 가지 차이점이 있습니다. setAcceptableValues ​​()가 호출 될 때마다이 메서드를 재정의 할 것을 제안했습니다. – Braj

답변

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); 

--EDIT--

이 하나

시도
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")); 
+0

ValueListBox가 오버라이드 되어도 여전히 하나 이상의 중복 값이 ​​표시됩니다 .-( – xybrek

+0

죄송합니다 하나만 가능합니다. 모델 객체의 유형은 무엇입니까? – Braj

+0

POJO 클래스입니까? 그렇다면 꼭해야합니다. 'HashSet' 규칙에 따라'hashCode()'와'equals()'를 덮어 쓰십시오. – Braj

0

ListBox 또는 ValueListBox에서 중복 옵션을 방지하거나 제거하는 방법은 없습니다. ValueListBox에 값을 전달하기 전에 중복 값을 제거해야합니다.

+0

실제로 목록 값에는 문제가 없습니다 , 거기에 복제물이 없다. 실제로 렌더링 된 다음 복제물이있을 때 – xybrek

+0

이 mea ns 두 번 추가 할 수 있습니다. –

+0

네,하지만 질문은 ValueListBox의 아이템 복제와 관련된 문제였습니다. – xybrek

4

다음을 사용해보십시오.

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

문자열 등이 아닌 다른 사용자 정의 개체 인 경우 해시 코드와 같음을 구현해야합니다.