为了账号安全,请及时绑定邮箱和手机立即绑定

使用lambda获取此对象的ArrayList中对象中所有字符串的长度之和

使用lambda获取此对象的ArrayList中对象中所有字符串的长度之和

萧十郎 2021-05-14 18:12:39
我有一个数组列表,其中包含此类的对象: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流,并将它们简单地求和。


查看完整回答
反对 回复 2021-05-19
?
波斯汪

TA贡献1811条经验 获得超4个赞

您不能直接总结流元素的不同内容。

因此,作为替代,我将使用以下SearchCriteria方法来提取计算逻辑:


public int computeAllLength(){

   return key.length() + operation.length() + value.toString().length();

}

我将以这种方式使用它:


int sum = builder.getParams().stream()

                 .mapToInt(SearchCriteria::computeAllLength)

                 .sum();


查看完整回答
反对 回复 2021-05-19
  • 3 回答
  • 0 关注
  • 351 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信