我有一个自定义课程
class StackInfo {
int start, size, capacity;
}
并验证我拥有的此类信息数组中存在的元素总数
private int numberOfElements(StackInfo[] info) {
int size = 0;
for (StackInfo si : info) {
size += si.size;
}
return size;
}
我尝试使用流将其转换为以下内容:
private int numberOfElements(StackInfo[] info) {
return (int) Arrays.stream(info).map(s -> s.size).count();
// ^^
// to convert long
}
但是上面的代码的输出在铸造后也是不正确的。
答案 0 :(得分:8)
您似乎在寻找sum
操作,而不是count
,这将需要您将Stream大部分转换为IntStream
。您可以将代码更新为:
private int numberOfElementsStream(StackInfo[] info) {
return Arrays.stream(info) // Stream<StackInfo>
.mapToInt(sd -> sd.size) //IntStream of their size
.sum(); // sum of all
}
答案 1 :(得分:2)
您可以使用reduce
操作:
Arrays.stream(info).reduce((s1, s2) -> s1.size + s2.size);
或者如{nullpointer所示的sum
:
Arrays.stream(info).mapToInt(StackInfo::getSize).sum();