Java8使用Stream实现List中对象属性的求和、最大、最小、平均值 |
您所在的位置:网站首页 › bigdecimal求平均值 › Java8使用Stream实现List中对象属性的求和、最大、最小、平均值 |
前言 Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。 Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。 Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。 这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。 元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。 特点1 . 不是数据结构,不会保存数据。 2. 不会修改原来的数据源,它会将操作后的数据保存到另外一个对象中。(保留意见:毕竟peek方法可以修改流中元素) 3. 惰性求值,流在中间处理过程中,只是对操作进行了记录,并不会立即执行,需要等到执行终止操作的时候才会进行实际的计算。 用法今天,我们主要讲一下Stream中的求和、最大、最小、平均值。 代码语言:javascript复制public static void main(String[] args) throws Exception { List list = new ArrayList(){ { add(new Pool("A", 1)); add(new Pool("A", 2)); add(new Pool("A", 3)); add(new Pool("B", 4)); add(new Pool("B", 5)); } }; // 求和 int sum = list.stream().mapToInt(Pool::getValue).sum(); // 最大值 OptionalInt max = list.stream().mapToInt(Pool::getValue).max(); // 最小值 OptionalInt min = list.stream().mapToInt(Pool::getValue).min(); // 平均值 OptionalDouble average = list.stream().mapToInt(Pool::getValue).average(); System.err.println(sum); System.err.println(max.getAsInt()); System.err.println(min.getAsInt()); System.err.println(average.getAsDouble()); }输出结果 代码语言:javascript复制15 5 1 3.0其他方法当然,Stream远不止这么简单,不止有mapToInt(),还有mapToLong()、mapToDouble()等方法。 代码语言:javascript复制list.stream().mapToLong(Pool::getValue).sum(); list.stream().mapToLong(Pool::getValue).max(); list.stream().mapToLong(Pool::getValue).min(); list.stream().mapToLong(Pool::getValue).average(); list.stream().mapToDouble(Pool::getValue).sum(); list.stream().mapToDouble(Pool::getValue).max(); list.stream().mapToDouble(Pool::getValue).min(); list.stream().mapToDouble(Pool::getValue).average(); |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |