我有一个数组列表,其中包含此类的对象:public class SearchCriteria { private String key; private String operation; private Object value; }如何计算此ArrayList中所有对象中所有String的长度?可以在foreach中完成,但我想也可以在lambda中完成,但是我不知道它是如何偷偷摸摸的和现代的。现在我的解决方案是:Integer sum=0; for (SearchCriteria s: builder.getParams() ) { sum+=s.getKey().length(); sum+=s.getOperation().length(); sum+=s.getValue().toString().length(); }
3 回答
湖上湖
TA贡献2003条经验 获得超2个赞
您可以使用:
List<SearchCriteria> list = ...
int sum = list.stream()
.flatMapToInt(crit -> Arrays.stream(new int[] {
crit.getKey().length(),
crit.getOperation().length(),
crit.getValue().toString().length()}))
.sum();
这样就构成了所有length值的int流,并将它们简单地求和。
波斯汪
TA贡献1811条经验 获得超4个赞
您不能直接总结流元素的不同内容。
因此,作为替代,我将使用以下SearchCriteria方法来提取计算逻辑:
public int computeAllLength(){
return key.length() + operation.length() + value.toString().length();
}
我将以这种方式使用它:
int sum = builder.getParams().stream()
.mapToInt(SearchCriteria::computeAllLength)
.sum();
添加回答
举报
0/150
提交
取消