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

我有一个数组列表,其中包含此类的对象:


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();

        }


萧十郎
浏览 352回答 3
3回答

湖上湖

您可以使用:List<SearchCriteria> list = ...int sum = list.stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .flatMapToInt(crit -> Arrays.stream(new int[] {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; crit.getKey().length(),&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; crit.getOperation().length(),&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; crit.getValue().toString().length()}))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .sum();这样就构成了所有length值的int流,并将它们简单地求和。

波斯汪

您不能直接总结流元素的不同内容。因此,作为替代,我将使用以下SearchCriteria方法来提取计算逻辑:public int computeAllLength(){&nbsp; &nbsp;return key.length() + operation.length() + value.toString().length();}我将以这种方式使用它:int sum = builder.getParams().stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.mapToInt(SearchCriteria::computeAllLength)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.sum();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java