java8 Stream API之reduce使用说明

本篇我们只讲reduce。

reduce的作用是把stream中的元素给组合起来。

至于怎么组合起来:它需要我们首先提供一个起始种子,然后依照某种运算规则使其与stream的第一个元素发生关系产生一个新的种子,这个新的种子再紧接着与stream的第二个元素发生关系产生又一个新的种子,就这样依次递归执行,最后产生的结果就是reduce的最终产出,这就是reduce的算法最通俗的描述;

那么结合实际的业务场景来说,运用reduce我们可以做sum,min,max,average,所以这些我们称之为针对具体应用场景的reduce,这些常用的reduce,stream api已经为我们封装了对应的方法。

以下给出一些具体应用场景的reduce实现方式:

sum

  @Test
  public void testSum() {
    List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5);

    // 没有起始值时返回为Optional类型
    Optional<Integer> sumOptional = integers.stream().reduce(Integer::sum);
    System.out.println(sumOptional.get());

    // 可以给一个起始种子值
    Integer sumReduce = integers.stream().reduce(0, Integer::sum);
    System.out.println(sumReduce);

    //直接用sum方法
    Integer sum = integers.stream().mapToInt(i -> i).sum();
    System.out.println(sum);
  }

concat

@Test
  public void testConcat() {
    //构造字符串流
    List<String> strs = Arrays.asList("H", "E", "L", "L", "O");

    // reduce
    String concatReduce = strs.stream().reduce("", String::concat);
    System.out.println(concatReduce);
  }

min

  @Test
  public void testMin() {

    //min reduce
    Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5);
    Integer minReduce = integerStream.reduce(Integer.MAX_VALUE, Integer::min);
    System.out.println(minReduce);

    // min
    Stream<Integer> integerStream1 = Stream.of(1, 2, 3, 4, 5);
    OptionalInt min = integerStream1.mapToInt(i -> i).min();
    System.out.println(min.getAsInt());
  }

max

  @Test
  public void testMax() {

    //max reduce
    Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5);
    Integer maxReduce = integerStream.reduce(Integer.MIN_VALUE, Integer::max);
    System.out.println(maxReduce);

    // max
    Stream<Integer> integerStream1 = Stream.of(1, 2, 3, 4, 5);
    OptionalInt max = integerStream1.mapToInt(i -> i).max();
    System.out.println(max.getAsInt());
  }

ok,相信大家已经对reduce有所了解!

补充知识:了解Java JNI及动态链接库

提到Java JNI不得不提到动态链接库,在window操作系统中一般为后缀为DLL的文件,在Linux中为.so文件。动态链接库的作用在于为多个应用程序提供相同的函数功能,以此达到节省代码量,节省内存,共享相关数据、系统资源的作用。

Java的JNI则是为了对接这种功能的技术。

Java中的一个方法申明为native时,是不会直接用java代码去做实现的,因为native方法就是通过JNI去调用动态库。JDK中有很多native方法,通常涉及到一些底层技术,系统资源相关。

以上这篇java8 Stream API之reduce使用说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java8中Lambda表达式使用和Stream API详解

    前言 Java8 的新特性:Lambda表达式.强大的 Stream API.全新时间日期 API.ConcurrentHashMap.MetaSpace.总得来说,Java8 的新特性使 Java 的运行速度更快.代码更少.便于并行.最大化减少空指针异常. 0x00. 前置数据 private List<People> peoples = null; @BeforeEach void before () { peoples = new ArrayList<>(); peoples

  • 如何利用Java8 Stream API对Map按键或值排序

    一.什么是Java 8 Stream 使用Java 8 Streams,我们可以按键和按值对映射进行排序.下面是它的工作原理: Java Stream函数式编程?用过都说好,案例图文详解送给你 将Map或List等集合类对象转换为Stream对象 使用Streams的sorted()方法对其进行排序 最终将其返回为LinkedHashMap(可以保留排序顺序) sorted()方法以Comparator作为参数,从而可以按任何类型的值对Map进行排序.如果对Comparator不熟悉,可以看本号

  • java8使用Stream API方法总结

    Stream是java8中处理集合的关键抽象概念,它可以指定您希望对集合进行的操作,可以执行非常复杂的查找.过滤和映射数据等操作.使用Stream API对集合数据进行操作,就类似于使用SQL执行的数据库查询. Stream 的三个操作步骤 1.创建Stream. 得到Stream流的第一种方式: 可以通过Collection系列集合提供提供的Stream()或parallelStream @Test public void test1() { //可以通过Collection系列集合提供提供的

  • Java 8 Stream Api 中的 map和 flatMap 操作方法

    1.前言 Java 8提供了非常好用的 Stream API ,可以很方便的操作集合.今天我们来探讨两个 Stream中间操作 map(Function<? super T, ? extends R> mapper) 和 flatMap(Function<? super T, ? extends Stream<? extends R>> mapper) 2. map 操作 map 操作是将流中的元素进行再次加工形成一个新流.这在开发中很有用.比如我们有一个学生集合,我们

  • Java8 Stream API 详细使用方法与操作技巧指南

    本文实例讲述了Java8 Stream API 详细使用方法与操作技巧.分享给大家供大家参考,具体如下: 1. 概述 Java 8 引入的一个重要的特性无疑是 Stream API.Stream 翻译过来是"流",突然想到的是大数据处理有个流式计算的概念,数据通过管道经过一个个处理器(Handler)进行筛选,聚合,而且流都具有向量性,强调的是对数据的计算处理,而集合强调的是数据集.Stream可以看做是一个可操作的数据集序列,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找.

  • 解析Java的Jackson库中Streaming API的使用

    流式API读取和写入JSON内容离散事件. JsonParser读取数据,而JsonGenerator写入数据.它是三者中最有效的方法,是最低开销和最快的读/写操作.它类似于XML的Stax解析器. 在本文中,我们将展示的使用Jackson的流式API 读写JSON数据.流式API工作使用JSON为每一个细节的都是要小心处理.下面的例子将使用两个类: JsonGenerator类--写入JSON字符串. sonGenerator是定义公共API编写的Json内容的基类.使用JsonFactory

  • Java8新特性之Stream API详解

    一.前言 StreamAPI在Java8版本中使用,关注的是对数据的筛选.查找.存储等 它可以做的事情有:过滤.排序.映射.归约 二.使用流程 Stream实例化中间操作(过滤.排序.映射.规约)终止操作(匹配查找.归约.收集) 三.案例演示 public class EmployeeData { public static List<Employee> getEmployees(){ List<Employee> list = new ArrayList<>(); l

  • Java中使用StackWalker和Stream API进行堆栈遍历

    1.Java 9以前堆栈遍历 到目前为止,官方解决方案是获取当前线程并调用其getStackTrace()方法: StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); 另一个智能解决方案涉及.抛出异常并从中提取堆栈跟踪信息. 但是,无法操纵结果,它会立即打印出来: new Exception().printStackTrace(); 两种解决方案都存在同样的问题--它们都急切地捕获整个堆栈

  • 基于Java8 Stream API实现数据抽取收集

    目标&背景 我们以"处理订单数据"为例,假设我们的应用是一个分布式应用,有"订单应用","物流应用","商品应用"等都是独立的服务.本次我们的目的需要展示订单列表完整数据: 1.查询订单列表. 2.批量查询物流信息. 3.将物流信息填充到订单主信息中. 假设我们定义了一个订单类,具有几个关键的属性:订单号,状态,订单价,快递信息.如下所示: class Order{ String orderSeq; String st

  • Java 8中Stream API的这些奇技淫巧!你Get了吗?

    上次老师跟大家分享了 cookie.session和token,今天给大家分享一下Java 8中的Stream API. Stream简介 1.Java 8引入了全新的Stream API.这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同. 2.stream是对集合对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作,或者大批量数据操作. 3.只要给出需要对其包含的元素执行什么操作,比如 "过滤掉长度大于 10 的字符串".&

随机推荐