Java 如何将字符串[]转换为ArrayList<;字符串>;使用BeanUtils.populate方法?
如何使用BeanUtils.populate方法将字符串[]转换为ArrayList?看起来我可以使用ArrayConverter类,但我很难找到一个解释如何做到这一点 以下是我创建的一些测试代码:Java 如何将字符串[]转换为ArrayList<;字符串>;使用BeanUtils.populate方法?,java,string,arraylist,apache-commons-beanutils,Java,String,Arraylist,Apache Commons Beanutils,如何使用BeanUtils.populate方法将字符串[]转换为ArrayList?看起来我可以使用ArrayConverter类,但我很难找到一个解释如何做到这一点 以下是我创建的一些测试代码: public class TestAction { public static TestBean testPopulate() throws IllegalAccessException, InvocationTargetException { HashMap<String, Obje
public class TestAction {
public static TestBean testPopulate() throws IllegalAccessException, InvocationTargetException {
HashMap<String, Object> map = new HashMap<String, Object>();
TestBean bean = new TestBean();
String[] names = {"teststring","testboolean","testinteger","testarray"};
String[] array = {"hi","bye"};
Object[] values = {"TEST","","100",array};
int i = 0;
while (i < names.length) {
String name = names[i];
map.put(name, values[i]);
i++;
}
BeanUtils.populate(bean, map);
return bean;
}
public static void main(String[] args) {
try {
TestBean bean = testPopulate();
System.out.println(bean.getTeststring() + " " + bean.getTestinteger() + " " + bean.getTeststring() + " " + bean.isTestboolean());
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class TestBean {
private String teststring;
private boolean testboolean;
private int testinteger;
private ArrayList<String> testarray;
public String getTeststring() {
return teststring;
}
public void setTeststring(String teststring) {
this.teststring = teststring;
}
public boolean isTestboolean() {
return testboolean;
}
public void setTestboolean(boolean testboolean) {
this.testboolean = testboolean;
}
public int getTestinteger() {
return testinteger;
}
public void setTestinteger(int testinteger) {
this.testinteger = testinteger;
}
public ArrayList<String> getTestarray() {
return testarray;
}
public void setTestarray(ArrayList<String> testarray) {
this.testarray = testarray;
}
}
公共类测试{
公共静态TestBean testPopulate()抛出IllegaAccessException、InvocationTargetException{
HashMap=newHashMap();
TestBean=新的TestBean();
字符串[]名称={“teststring”、“testboolean”、“testinteger”、“testarray”};
字符串[]数组={“hi”,“bye”};
Object[]值={“TEST”、“”、“100”、数组};
int i=0;
while(i
我传入了一个String[]类型,希望它知道如何转换为ArrayList,但它失败了。您没有提到代码中的具体失败之处,但下面介绍了如何在没有任何第三方实用程序的情况下将String array转换为list:
Arrays.asList(新字符串[]{“aaa”、“bbb”、“ccc”})
您没有提到代码中的具体失败之处,但下面介绍如何在没有任何第三方实用程序的情况下将字符串数组转换为列表:
Arrays.asList(新字符串[]{“aaa”、“bbb”、“ccc”})
这是一个通用的答案,因为我通常不使用bean。也许小海狸会处理这个案子,但这会让我大吃一惊
字符串数组与ArrayList对象不同,尽管它们有相似之处。通常,隐式地从一个转换到另一个是一个糟糕的想法,因为有多种逻辑方法可以实现
- 您可以使用它获取数组并返回包装器
对象。请注意,它不是一个List
,而是一个固定大小的ArrayList
自定义实现,它直接与传递的数组接口,这意味着不需要分配新的存储List
- 如果您确实想要一个
,则可以基于所获得的ArrayList
对象构建一个新的列表,方法是:列表
ArrayList<String> ls = new ArrayList<String>(Arrays.asList(myArray));
此调用确实分配了一个新的存储阵列,但如果您想要可调整的大小,则必须接受O(n)成本arraylistls=newarraylist(Arrays.asList(myArray));
列表是一个糟糕的主意-它应该选择哪种实现?如果你试图调整它的大小,快速的会抛出异常,还是缓慢的不会
尽可能明确地说明类型转换。尽管冗长似乎令人讨厌,但这是Java最强大的特性之一。这是一个通用的答案,因为我通常不使用bean。也许小海狸会处理这个案子,但这会让我大吃一惊
字符串数组与ArrayList对象不同,尽管它们有相似之处。通常,隐式地从一个转换到另一个是一个糟糕的想法,因为有多种逻辑方法可以实现
- 您可以使用它获取数组并返回包装器
List
对象。请注意,它不是一个ArrayList
,而是一个固定大小的List
自定义实现,它直接与传递的数组接口,这意味着不需要分配新的存储
- 如果您确实想要一个
ArrayList
,则可以基于所获得的列表
对象构建一个新的列表,方法是:
ArrayList<String> ls = new ArrayList<String>(Arrays.asList(myArray));
arraylistls=newarraylist(Arrays.asList(myArray));
此调用确实分配了一个新的存储阵列,但如果您想要可调整的大小,则必须接受O(n)成本
这两种可能的选择都是同样有效的,这取决于您的用例,这正是为什么bean隐式地将数组转换成列表是一个糟糕的主意-它应该选择哪种实现?如果你试图调整它的大小,快速的会抛出异常,还是缓慢的不会
尽可能明确地说明类型转换。尽管冗长似乎令人讨厌,但这是Java最强大的功能之一。好的,我现在明白了。我将字符串[]更改为ArrayList,代码运行时没有错误。BeanUtils在从字符串[]转换为ArrayList时故意失败。作为后续问题,既然Java中的HttpServletRequest类返回String或String[]类型,那么这是否会迫使我只使用基元类型和String[]类型