将 List<String> 转换为 List<Integer> 仅用于有效整数
Convert List<String> to List<Integer> for only valid Integer
我正在尝试使用 Java 8 流将 List<String>
转换为 List<Integer>
。但是,List<String>
中有几个 无效整数 。如何仅提取整数值,然后将 String
列表转换为 Integer
列表?
例如:
List<Integer> intList = new ArrayList<Integer>();
List<String> strList = new ArrayList<String>();
String str[] = {"464 mm", "80 mm", "1000", "1220", "48 mm", "1020"};
strList = Arrays.asList(str);
intList.addAll(strList.stream().map(Integer::valueOf).collect(Collectors.toList()));
我遇到错误 java.lang.NumberFormatException: For input string: "464 mm"
。
有没有办法,我可以使用正则表达式
str.replaceAll("[^\d]", " ").trim()
提取数字然后转换。我不想使用 for 循环或 while 循环,因为这可能会影响我的代码性能。
为了从每个字符串中删除所有 non-numeric 个字符,您需要在将 String
的流转换为之前应用 map()
Integer
.
流
List<Integer> nums =
strList.stream()
.map(s -> s.replaceAll("[^\d]", ""))
.map(Integer::valueOf)
.collect(Collectors.toList());
System.out.println(nums);
输入 {"464 mm", "80 mm", "1000", "1220", "48 mm", "1020"}
[464, 80, 1000, 1220, 48, 1020]
注:
trim()
在 replaceAll()
之后是多余的。
- 由于您要将流管道生成的列表的所有内容添加到另一个列表中,因此您可以将
collect(Collectors.toList())
替换为 toList()
,后者可通过 [=50 访问=] 16 起。不同之处在于 toList()
returns 一个 不可修改的列表 并且它比 collector. 更高效
- 迭代解决方案几乎总是比stream-based表现更好。 Java 中引入了 Lambda 和流,以提供一种组织代码的方式,使其更具可读性和简洁性。
我正在尝试使用 Java 8 流将 List<String>
转换为 List<Integer>
。但是,List<String>
中有几个 无效整数 。如何仅提取整数值,然后将 String
列表转换为 Integer
列表?
例如:
List<Integer> intList = new ArrayList<Integer>();
List<String> strList = new ArrayList<String>();
String str[] = {"464 mm", "80 mm", "1000", "1220", "48 mm", "1020"};
strList = Arrays.asList(str);
intList.addAll(strList.stream().map(Integer::valueOf).collect(Collectors.toList()));
我遇到错误 java.lang.NumberFormatException: For input string: "464 mm"
。
有没有办法,我可以使用正则表达式
str.replaceAll("[^\d]", " ").trim()
提取数字然后转换。我不想使用 for 循环或 while 循环,因为这可能会影响我的代码性能。
为了从每个字符串中删除所有 non-numeric 个字符,您需要在将 String
的流转换为之前应用 map()
Integer
.
List<Integer> nums =
strList.stream()
.map(s -> s.replaceAll("[^\d]", ""))
.map(Integer::valueOf)
.collect(Collectors.toList());
System.out.println(nums);
输入 {"464 mm", "80 mm", "1000", "1220", "48 mm", "1020"}
[464, 80, 1000, 1220, 48, 1020]
注:
trim()
在replaceAll()
之后是多余的。- 由于您要将流管道生成的列表的所有内容添加到另一个列表中,因此您可以将
collect(Collectors.toList())
替换为toList()
,后者可通过 [=50 访问=] 16 起。不同之处在于toList()
returns 一个 不可修改的列表 并且它比 collector. 更高效
- 迭代解决方案几乎总是比stream-based表现更好。 Java 中引入了 Lambda 和流,以提供一种组织代码的方式,使其更具可读性和简洁性。