有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

public class SearchCriteria {
    private String key;
    private String operation;
    private Object value; 
}

如何计算此ArrayList中所有对象中所有字符串的长度? 它可以在foreach中完成,但我想它也可以在lambda中完成,但我不知道如何做到偷偷摸摸和现代

现在我的解决方案是:

Integer sum=0;
        for (SearchCriteria s: builder.getParams()
             ) {
            sum+=s.getKey().length();
            sum+=s.getOperation().length();
            sum+=s.getValue().toString().length();
        }

共 (3) 个答案

  1. # 1 楼答案

    我不知道为什么这对你有用,但你可以试试这个:

    List<SearchCriteria> criterion = builder.getParams();
    int sum = criterion.stream().map(s -> s.getKey() + s.getOperation() + s.getValue())
                       .mapToInt(String::length).sum();
    
  2. # 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流,并对它们进行简单求和

  3. # 3 楼答案

    可以使用flatMapToIntStream<SearchCriteria >转换为IntStream,其中包含原始Stream元素的所有属性的长度:

    int sum = builder.getParams()
                     .stream()
                     .flatMapToInt(sc -> IntStream.of(sc.getKey().length(),sc.getOperation().length(),sc.getValue().toString().length()))
                     .sum();