美文网首页
stream与lambda表达式的使用

stream与lambda表达式的使用

作者: 风一样的存在 | 来源:发表于2019-04-10 10:27 被阅读0次

    遍历集合含有索引

    private Map<String,String> findUserGroups(List<String> results){
            Map<String,String> map = Maps.newHashMap();
            Stream.iterate(0, i -> i + 1).limit(results.size())
                    .filter(i -> results.get(i).contains("、"))
                    .forEach(i ->
            map.put(String.valueOf(i),results.get(i))
      );
      return map;
    }
    

    常用操作

    //rangeClosed包含末尾数据
    long sum=LongStream.rangeClosed(1,10000000L).parallel().reduce(0,Long::sum);
    System.out.println(sum);
    
    //range不包含末尾节点
    sum=LongStream.range(1,10000000L).parallel().reduce(0,Long::sum);
    System.out.println(sum);
    
    //求和reduce()
    System.out.println(Stream.of(1,2,3,4).reduce((sum2,item)->{
          return sum2+item;
    }).get());
    System.out.println(Stream.of(1,2,3,4).reduce(Integer::sum).get());
    
    //求最大值reduce()
    System.out.println(Stream.of(1,2,3,4).reduce(100,(a,b)->Math.max(a, b)));
    System.out.println(Stream.of(1,2,3,4).reduce(Integer::max).get());
    
    //去重distinct()
    System.out.println(Arrays.asList("a", "b", "c", "d", "a", "b", "c")
        .stream()
        .distinct()
        .collect(Collectors.toList())
    );
    
    //统计分组
    System.out.println(Arrays.asList("apple", "apple", "banana",
        "apple", "orange", "banana", "papaya")
     .stream().collect(Collectors.groupingBy(Function.identity(),Collectors.counting()))
    );
    
    //统计排序
    Map<String,Long> sortMap=new LinkedHashMap<>();
    Arrays.asList("apple", "apple", "banana", "apple", "orange", "banana", "papaya")
        .stream()
    .collect(Collectors.groupingBy(Function.identity(),Collectors.counting()))
    .entrySet()
    .stream()
    .sorted(Map.Entry.<String, Long>comparingByValue().reversed())
    .forEachOrdered(e->sortMap.put(e.getKey(),e.getValue()));
    System.out.println(sortMap);
    
    运行结果: 运行结果

    对含有BigDecimal字段的对象集合求和

    BigDecimal result2 = userList.stream()
    //将user对象的age取出来map为Bigdecimal
    .map(User::getAge)
    //使用reduce()聚合函数,实现累加器
    .reduce(BigDecimal.ZERO,BigDecimal::add);
    

    对int、double类型求和

    int ageSum = userList.stream().collect(Collectors.summingInt(User::getAge));
    System.out.println("年龄总和" + ageSum);
    

    相关文章

      网友评论

          本文标题:stream与lambda表达式的使用

          本文链接:https://www.haomeiwen.com/subject/wzyabqtx.html