我有一个名为listout的ArrayList<String>
,我想将其转换为ArrayList<SelectItem>
。我该怎么做呢?
PS: JSF的selectItem
根据您的问题历史记录,您正在使用JSF 2。在这种情况下,知道<f:selectItem>
和<f:selectItems>
不再需要单个或SelectItem
对象的集合是很好的。只是一个普通的String
,甚至一个Javabean也完全可以。
private String selectedItem;
private List<String> availableItems;
// ...
<h:selectOneMenu value="#{bean.selectedItem}">
<f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
在JSF 2中应该也能正常工作。
或者,一个Javabeans的集合,假设Foo
具有属性id
和name
。
private Foo selectedItem;
private List<Foo> availableItems;
// ...
<h:selectOneMenu value="#{bean.selectedItem}">
<f:selectItems value="#{bean.availableItems}" var="foo" itemValue="#{foo}" itemLabel="#{foo.name}" />
</h:selectOneMenu>
参见:
- 我们的
<selectOneMenu>
wiki页面
假设您指的是JSF的SelectItem
:
List<SelectItem> items = new ArrayList<SelectItem>(listout.size());
for(String value : listout){
items.add(new SelectItem(value));
}
return items;
我不知道SelectItem
是什么,所以我假设你有一个方法来转换String
到它,命名为createSelectItem()。
你必须遍历字符串并填充另一个ArrayList
:
ArrayList<SelectItem> out = new ArrayList<SelectItem>();
for(String str : listout) {
out.add(createSelectItem(str));
番石榴溶液:
Collection<SelectItem> result = Collections2.transform(
listout,
new Function<String, SelectItem>(){
@Override
public SelectItem apply(String s) {
return createSelectItem(s);
}
});