今天下了JDK 8 EA 尝尝鲜
摸了好久才摸懂 一些地方 写写文章分享下经验 如有说错欢迎打脸
reduce的操作有点麻烦 所以这里就专门说一下
如有说错欢迎打脸...
因为java是静态语言所以一些地方自然不如动态语言方便
比如说我这里有个要求 把0-99的List打印成String输出(当然直接用for也可以啦)
用groovy的话 代码很简单:
def list=0..<100 def sb=list.inject(new StringBuffer(),{result,element -> result.append("${element} ")})
最后也会用java中 stream的reduce说一遍
开始...
而java中的reduce操作有三个:
- 一个参数的
- 两个参数的
- 三个参数的_(:3」∠)_
一个简单是实例 完成累加的操作(当然用mapToInt然后再用sum更好,这里说明用):
public static void main(String[] args){ List<Integer> list=new ArrayList<Integer>(); for(int i=0;i<100;i++){ list.add(Integer.valueOf(i)); } System.out.println(list.stream().reduce( (result,element)-> result=result+element)); System.out.println(list.stream().reduce( 0, (result,element)-> result=result+element)); System.out.println(list.stream().reduce( 0, (result,element)-> result=result+element ,(u,t) -> t)); }
结果:
在实现中
一个参数是这样实现(近似的实现)的:
boolean foundAny = false; T result = null; for (T element : this stream) { if (!foundAny) { foundAny = true; result = element; } else result = accumulator.apply(result, element); } return foundAny ? Optional.of(result) : Optional.empty();
实现很简单 初始的result是stream中的某一个值(实际中不是顺序执行的) 之后执行你给的函数就可以了(请把accumulator.apply(result,element) 用自己的函数代替 这里是 result=result+element;
从这里也提醒了函数中参数的位置 聚合用的result是第一个参数 遍历的元素放在第二个参数里
二个参数的也同理:
T result = identity; for (T element : this stream) result = accumulator.apply(result, element) return result;
因为result用的是自定义的值(要符合泛型的要求) 所以代码短一些
三个参数的 对初始值没有泛型的要求:
U result = identity; for (T element : this stream) result = accumulator.apply(result, element) return result;
看起来和第二个除了在泛型的要求上不一样之外 也没其他什么 但他有个要求
对于第二个函数有限制:
必须满足
combiner.apply(u, accumulator.apply(identity, t)) == accumulator.apply(u, t)
但实际使用的时候感觉怪怪的...因为即使有打印信息 并不会有任何输出 但如果这个函数没有返回任何东西无法通过编译.. 实际中直接返回u或者t就可以了(这里有人知道为什么吗..求解),但为了符合以上这个规定,两个函数写得一样好像也没关系.
只有第三个参数的reduce是不受流的类型限制的 也就是可以返回任意类型的数据 所以三个参数的那个实用性大一点(应该...)
现在回到刚开始的问题里
给出代码:
import java.util.*; import java.util.concurrent.*; import java.util.stream.*; public class Test4{ public static void main(String[] args){ List<Integer> list=new ArrayList<Integer>(); for(int i=0;i<100;i++){ list.add(Integer.valueOf(i)); } System.out.println(list.stream().reduce( new StringBuilder(), (result,element)-> result=result.append(element) ,(u,t) -> u=u.append(t))); //这个地方 返回 u或者t也是可以的 运行没错 } }
相关推荐
在 Java 8 中,Stream API 提供了一个强大的方法reduce,用于从 Stream 中生成一个值。这个值不是随意的,而是根据指定的计算模型。reduce 操作可以实现从 Stream 中生成一个值,其生成的值不是随意的,而是根据指定...
通过这种方式,Java 8的Stream API和`reduce()`方法提供了一种简洁、高效的方法来处理分组统计任务,类似于JavaScript中的`_.groupBy`和`_.reduce`。这种编程风格有助于我们编写出更清晰、更易于维护的代码。
### Java8 Stream学习 ...综上所述,Java8的Stream API为处理集合数据提供了一种强大而优雅的方法,极大地提高了开发效率和代码质量。通过掌握Stream的使用技巧,开发者可以在实际项目中更好地应对各种数据处理需求。
根据提供的文件信息,本文将详细介绍Java 8中Stream API的核心概念、使用方法及其实战案例。Stream API作为Java 8的重要特性之一,极大地简化了集合处理的代码编写过程,提升了程序的可读性和效率。 ### Stream概述...
在Java 8 Stream API中,我们可以实现一些复杂的操作,比如使用`filter()`筛选出满足条件的元素,`map()`将元素转换为另一种类型,然后使用`reduce()`进行聚合操作。此外,`groupingBy()`方法可以用于按指定字段进行...
以下是对"Java 8 Stream使用总结"的详细说明: 1. **什么是Stream**: Stream API是一个在Java 8中引入的概念,它提供了一种全新的处理数据的方式,可以看作是从集合到计算的一种桥梁。Stream不是存储数据的数据...
Java Stream是Java 8引入的重要特性,它提供了一种声明式处理数据集合的方式,极大地提升了代码的可读性和性能。Stream允许程序员更加专注于业务逻辑,而不是底层数据处理的细节。 **1. Java Stream简介** Java ...
此外,在 Java8 中,我们还可以使用 Stream 的其他方法来实现列表元素的属性求和操作,例如使用 map 方法来将列表中的元素转换成一个新的流,然后使用 reduce 方法来求和。 例如,我们可以使用以下代码来实现上述...
Java8 Stream API 详细使用方法与操作技巧指南 Java 8 引入了 Stream API,这是一个重要的特性,允许开发者以一种声明式的方式对数据进行处理。Stream 翻译过来是“流”,它可以看做是一个可操作的数据集序列,具有...
Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以...
Stream API首次在Java 8中引入,极大地提升了代码的简洁性和可读性。 Java中的Stream分为两种类型:InputStream和OutputStream,分别对应输入流和输出流。InputStream用于读取数据,而OutputStream则用于写入数据。...
在`java8-stream.xls`文件中,我们可以使用Java 8的流API来处理Excel数据。例如,读取工作表中的数据,使用流进行过滤、排序等操作,然后将结果写入新的工作表。 ```java // 使用Apache POI库读取Excel文件 ...
Java 8 Stream API 终端操作 Java 8 中的 Stream API 提供了强大的数据处理功能,其中的终端操作是指将 Stream 处理结果转换为实际的数据结构。Java Stream 管道流数据处理操作可以分为三个阶段:第一阶段是将集合...
例如,你可以使用filter、map、reduce等方法构建复杂的查询,而无需编写SQL语句。这种面向对象的查询方式使得代码更易于理解和维护。 4. **并行处理**:由于Stream API支持并行处理,Speedment能够充分利用多核...
Java 8 Stream API是Java开发中的一个重要里程碑,它引入了一种全新的处理数据的方式,使得代码更加简洁、高效。Stream API可以用于处理集合、数组以及其他数据源,提供了丰富的操作,如筛选、映射、聚合等,使得...
以下将详细介绍Stream流的使用,以及它在Java8中的重要性。 首先,Stream API是一种用于处理集合的新接口,它可以对集合进行各种操作,如过滤、映射、聚合等,而无需显式地遍历集合。这种处理方式称为“函数式编程...
Java 8 是一个重要的 Java 发行版本,引入了许多新特性,其中最为显著的就是 Stream API。Stream API 提供了一种全新的处理数据的方式,使得在集合、数组等数据源上的操作更加简洁、高效。在这个主题中,我们将深入...
- 根据文件名`Java8Test.java`,我们可以推测该文件包含一个测试类,可能测试了Stream API的使用,比如测试了`filter()`、`map()`、`reduce()`等方法。 - 测试可能包括对数组或集合进行流操作,例如筛选满足特定...
Java8 Collect收集Stream的方法详解 Java8 中的 Collect 收集 Stream 的方法是 Java8 中一个重要的功能,主要用于对 Stream 中的元素进行收集和处理。下面是对该方法的详细介绍。 title: 详解 Java8 Collect收集...
其中,Stream API是Java 8中最显著的新特性之一,它为处理集合数据提供了全新的方式。Stream API使得我们能够以声明式的方式处理数据,非常适合进行并行计算和大数据操作。下面将详细介绍Stream API的基本使用及其在...