在Java中将String的List转换为BigDecimal的List

Raj*_*ana 3 java collections list type-conversion

我在将一个String列表转换为java中的Bigdecimal列表时遇到了问题.

我有一个字符串列表,如,

List<String> stringList = new LinkedList<String>();
stringList.add("123");
stringList.add("456");
stringList.add("789");
Run Code Online (Sandbox Code Playgroud)

和BigDecimal列表为

List<BigDecimal> bigDecimalList = new LinkedList<BigDecimal>();
Run Code Online (Sandbox Code Playgroud)

现在我要转换stringList为bigDecimalList.我知道我们可以遍历stringList并可以添加bigDecimalList使用new BigDecimal(string).还有其他工作而不是循环???

任何帮助表示赞赏.谢谢.

Jon*_*eet 8

好东西必须循环 - 直到Java 8带有lambda表达式以便更容易表达转换,没有通用的方法来进行转换.显然你可以编写一个方法来获取类名,并且总是通过反射将传入列表的每个元素作为参数传递给目标类的构造函数,但是在所有其他情况下都会失败.

鉴于循环有多短,我肯定会这样做:

List<BigDecimal> bigDecimalList = new LinkedList<BigDecimal>();
for (String value : stringList) {
    bigDecimalList.add(new BigDecimal(value));
}
Run Code Online (Sandbox Code Playgroud)

你真的需要避免这4行代码吗?


Mak*_*oto 5

在某种程度上 - 无论是在外部库,低级库还是在代码中 - 您都必须遍历结构并BigDecimal在其他列表中创建新对象.

现在Java 8已经有效地出现了,因此可以相当简洁地表达它.此代码假定您已经在stringList某处定义了.

List<BigDecimal> bigDecimalList = stringList.stream()
        .map(BigDecimal::new)
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

这将获取所有内容stringList,将它们映射到构造函数BigDecimal,并将它们收集到一个新List对象中,然后我们将其分配.