【发布时间】:2020-04-21 10:14:19
【问题描述】:
所以我目前正在尝试使用 Streams,并尝试计算流中字符串“589 Hello 56”中数字的平均值。 我的做法是这样的:
List <int[]> experiment = a.stream()
.map(x -> x.replaceAll("[^0-9]", "").split("\\D+"))
.map(x-> Arrays.asList(x).stream().mapToInt(Integer::parseInt).toArray())
.collect(Collectors.toList());
所以我首先得到一个带有“589 56”的字符串数组,因为我拆分了字符串。 但在那之后,我尝试将所有内容转换为 Integerarray 以更轻松地获得平均值,但它不起作用,因为“589 56”转换为“58956”。 有没有人有更好的方法?提前致谢。
【问题讨论】:
-
所以你想从字符串中取出所有数字,然后计算它们的平均值?
-
数字收集是一种不同的操作...不知道为什么要将它包含在任何流处理中。一旦你有了这些,你就可以流式传输列表并用它们做任何你想做的事情。
-
@marstran 是的,我想获取所有的数字。所以在这种情况下,它将是“589”和“56”。而且我想计算这两者的平均值,即 (589+56)/2 = 322.5
-
试试这个
Arrays.stream(s.split("\\D+")) .mapToInt(Integer::parseInt) .average(); -
FYI:
[^0-9]和\D是一回事,所以你首先删除所有非数字字符,然后尝试拆分现在不存在的非数字字符-digits,这意味着拆分会做事。
标签: java arrays string java-stream