Jsf 如何防止集合中的SelectItem重复

Jsf 如何防止集合中的SelectItem重复,jsf,duplicates,selectonemenu,Jsf,Duplicates,Selectonemenu,我正在尝试将SelectItem对象添加到集合集合中。但是,正在添加重复的值。有没有办法防止这些重复值 for(String s: list) { Set<SelectItem> typeSet = new HashSet<SelectItem>(); typeSet.add(new SelectItem(s)); } 用于(字符串s:list){ Set typeSet=新HashSet(); 排版。添加(新选择项); } 只需使用Set而不是S

我正在尝试将SelectItem对象添加到集合集合中。但是,正在添加重复的值。有没有办法防止这些重复值

for(String s: list) {       
  Set<SelectItem> typeSet = new HashSet<SelectItem>();
  typeSet.add(new SelectItem(s));
}
用于(字符串s:list){
Set typeSet=新HashSet();
排版。添加(新选择项);
}
只需使用
Set
而不是
Set
SelectItem#equals()
/
#hashCode()
的实现完全没有考虑实际值

private Set<String> typeSet;

@PostConstruct
public void init() {
    List<String> list = getItSomehow();
    typeSet = new LinkedHashSet<String>(list);
}
私人排版;
@施工后
公共void init(){
List List=getItSomehow();
typeSet=新的LinkedHashSet(列表);
}
这是因为JSF2也可以在
上使用

<f:selectItems value="#{bean.typeSet}" />

另见:

这是基本的Java。只需注意对象中的
hashCode()
equals()
方法,以防止
集中的重复。BalusC,与您建议的代码类似,我使用了SortedSet接口:
SortedSet typeSet=new TreeSet()
它对字符串值进行排序,并将所有这些值添加到列表中您本身不需要
列表
。您也可以直接将
集合
输入到它,如回答所示。当然。我会试试看。多谢!