执行结果如下所示 可以看到第三个consumer并没有被执行,在整个collect过程中,只创建了一个容器,然后将流中的数据添加到容器中,并不需要合并容器,将IntStream改成并行流 执行结果如下所示,在collect()过程创建了4个容器,执行了3次合并,将4个容器合并成最终结果容器并返回。方法二 这个方法和上面的不同是入...
mapToInt 将数据流中得元素转成Int,这限定了转换的类型Int,最终产生的流为IntStream,及结果只能转化成int。 public class Main { public static void main(String[] args) { Stream.of("apple", "banana", "orange", "waltermaleon", "grape") .mapToInt(e -> e.length()) //转成int .forEach(e...
我们可以这样简单的理解,Stream 里有个操作函数的集合,每次转换操作就是把转换函数放入这个集合中,在 Terminal 操作的时候循环 Stream 对应的集合,然后对每个元素执行所有的函数。 short-circuiting 对于一个intermediate 操作,如果它接受的是一个无限大(infinite/unbounded)的Stream,但返回一个有限的新Stream。 对于一个...
基本类型数组可以通过类似的方法转为 IntStream、LongStream、DoubleStream : int[] intArray = {1, 2, 3}; IntStream intStream1 = Arrays.stream(intArray); IntStream intStream2 = IntStream.of(intArray); 另外, Stream.of(T... values)、IntStream.of(int... values) 等静态方法支持 varargs(可变...
Stream<T>distinct(); count()方法是一个终端操作,返回流中的元素个数。 longcount(); 中间操作不会立即执行,只有等到终端操作的时候,流才开始真正地遍历,用于映射、过滤等。通俗点说,就是一次遍历执行多个操作,性能就大大提高了。 理论部分就扯这么多,下面直接进入实战部分。
mapToInt/mapToLong -- 将转换结果的原始数值自动包装,转换后生成一个 IntStream/LongStream flatMap -- 转换后生成多于原集合数量的新元素流 filter -- 过滤只保留符合条件的元素 distinct -- 去重 sorted -- 排序 peek -- 执行一个无返回的操作,不影响原来的流 ...
int[] intArr = {1,2,3,4,5};IntStreamarrayStream=Arrays.stream(intArr); 通过Arrays.stream方法生成流,并且该方法生成的流是数值流【即IntStream】而不是 Stream 注: 使用数值流可以避免计算过程中拆箱装箱,提高性能。 Stream API提供了mapToInt、mapToDouble、mapToLong三种方式将对象流【即Stream 】转换...
[5, 6],String 转变成了 Integer [欢迎, 阅读, 鳄鱼儿, 文章],一个流中的每个值都转换为另一个流,最好组合成一个新的stream。 mapToInt、mapToLong、mapToDouble分别是返回一个IntStream、LongStream、DoubleStream。 这些类型的stream包括一些sum()、max()min()方法等,可以用于计算,如下面代码求和示例: ...
转换流操作:例如filter和map方法,将一个Stream转换成另一个Stream,返回值都是Stream。 终结流操作:例如count和collect方法,将一个Stream汇总为我们需要的结果,返回值都不是Stream。 其中转换流操作的API我也分了两类,文中会有详细例子说明,这里先看一下定义,有一个大概印象: ...
public void count(){ long lCount = list.stream().count(); assertTrue(lCount == 5); int iCount = 0; for(Employee employee :list){ if(employee.getSalary()==2000){ iCount ++; } } log.info("iCount:{}",iCount); long lCount2 = list.stream().filter(employee -> employee.getSalar...