Java8 新特性 Stream 非短路终端操作

非短路终端操作

Java8 新特性 Stream 练习实例

非短路终端操作,就是所有的元素都遍厉完,直到最后才结束。用来收集成自己想要的数据。
方法有:

遍厉 forEach
归约 reduce
最大值 max
最小值 min
聚合 collect
计数 count

遍厉 forEach

 //遍厉 forEach
@Test
public void forEachTest() {
    list.stream()
            .forEach(iter ->
                    //以json格式输出
                    System.out.println(
                            JSON.toJSONString(iter, true)));
}
//在最后的时候输出所有的sku里面的值,不做别的操作

归约 reduce

//归约 reduce
@Test
public void reduceTest() {
    //reduce可以对流里面的数值进行,求和,最大值,最小值,拼接。。
    //你可以在reduce里面做任何自己想做的操作。
    //下面的min,max,都是reduce的简化。
    Optional<Double> reduceSum = list.stream()
            .map(Sku::getSkuPrice)
            .reduce(Double::sum);
    System.out.println(reduceSum.get());
    //11326.5
    Double reduceSumTest = list.stream()
            .map(Sku::getSkuPrice)
            .reduce(100.00, Double::sum);
    System.out.println(reduceSumTest);
    //11426.5
    Integer reduce = Stream.of(1, 2, 3).
            reduce(4,
                    (integer, integer2) -> integer + integer2,
                    (integer, integer2) -> integer + integer2);
    System.out.println(reduce);
    //非并行的结果:10
    //并行的结果:18,在of后面加上:parallel()
}

有一篇文章对这个问题分析的特别的好:?>>

最大值 max

//最大值 max
@Test
public void maxTest() {
    Optional<Double> max = list.stream()
            .map(Sku::getSkuPrice)
            .max(Double::compareTo);
            //如果的别的类型的话,也可以用别的类型里面的compareTo操作
    System.out.println(max.get());
    //4999.0
}

最小值 min

@Test
public void minTest() {
    Optional<Double> min = list.stream()
            .map(Sku::getSkuPrice)
            .min(Double::compareTo);
            //如果的别的类型的话,也可以用别的类型里面的compareTo操作
    System.out.println(min.get());
    //78.2
}

聚合 collect

//聚合 collect
@Test
public void collectTest() {
    Stream<String> s1 = Stream.of("aa", "ab", "c", "ad");
    //定义一个谓词
    Predicate<String> predicate = t -> t.contains("a");
    //通过自定义规则收集自己想要的数据
    ArrayList<String> collect = s1.parallel().collect(() -> new ArrayList<String>(),
            (array, s) -> {
                if (predicate.test(s))
                    array.add(s);
            },
            (array1, array2) -> array1.addAll(array2));
    collect.forEach(System.out::println);
    /**
     * aa
     * ab
     * ad
     */
    //也可以用定义好的规则,比如:toList,toSet,toMap...
}

有一篇文章对这个问题分析的特别的好:?>>

计数 count

//计数 count
@Test
public void countTest() {
    long count = list.stream().count();
    System.out.println(count);
}

细节决定成败!

个人愚见,如有不对,恳请扶正!

原文地址:https://www.cnblogs.com/xdtg/p/12008642.html

时间: 2024-09-30 19:30:34

Java8 新特性 Stream 非短路终端操作的相关文章

Java8 新特性 Stream 短路终端操作

短路终端操作 Java8 新特性 Stream 练习实例 传入一个谓词,返回传为boolean,如果符合条件,则直接结束流. 匹配所有 allMatch 任意匹配 anymMatch 不匹配 noneMatch 查找首个 findFirst 查找任意 findAny 匹配所有 allMatch //匹配所有 allMatch @Test public void allMatchTest() { boolean b = list.stream() //所有的商品价格都大于40 .allMatch(

Java8 新特性 Stream 无状态中间操作

无状态中间操作 Java8 新特性 Stream 练习实例 中间无状态操作,可以在单个对单个的数据进行处理.比如:filter(过滤)一个元素的时候,也可以判断,比如map(映射)... 过滤 filter 映射 map 扁夹化 flatMap 遍厉 peek 过滤 filter 接收一个谓词断言,boolean Pridicate< T > 根据返回值类型来确定是否过滤这一条属性. // 过滤 filter @Test public void filterTest() { list.stre

Java8新特性Stream API与Lambda表达式详解(1)

1 为什么需要Stream与Lambda表达式? 1.1  为什么需要Stream Stream作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念.它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream.Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作(aggr

java8 新特性 Stream

1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel aggregate operations. 我们来解读一下上面的那句话: Stream是元素的集合,这点让Stream看起来用些类似Iterator: 可以支持顺序和并行的对原Stream进行汇聚的操作: 大家可以把Stream当成一个高级版本的Iterator.原始版本的Iterator,用户只能一个一

Java8新特性 --Stream

一. 创建Stream 创建Stream方式一: 集合类的stream()或 parallelStream() java List<String> list = new ArrayList<>(); Stream<String> stream = list.stream(); 创建Stream方式二: 通过Arrays中的静态方法stream()获取 String[] strings = new String[10]; Stream<String> stre

java8新特性——Stream

一.stream介绍 stream(流)是一个来自数据源的元素队列 集合讲的是数据,而流讲的是计算 注意: ①stream自己不会存储元素 ②stream不会改变源对象,相反他会返回一个持有结果的新stream ③stream操作是延时执行的,这意味着他们会等到需要结果的时候才执行 stream操作的三个步骤 ①创建stream //1.通过Collection 系列集合提供的stream()[串行流]或 [并行流]来生成流 List list = new ArrayList(); Stream

Java8新特性——stream流

一.基本API初探 package java8.stream; import java.util.Arrays; import java.util.IntSummaryStatistics; import java.util.List; import java.util.Random; import java.util.stream.Collectors; import java.util.stream.IntStream; /** * @author [email protected] * @

java8 新特性 Stream流 分组 排序 过滤 多条件去重

private static List<User> list = new ArrayList<User>(); public static void main(String[] args) { list = Arrays.asList( new User(1, "a", 10), new User(4, "d", 19), new User(5, "e", 13), new User(2, "b", 1

Java8 新特性 Stream() 创建流

通过Controllere类的Stream()和parallelStream()创建流 //通过集合创建流 @Test public void test1() { String arr[] = new String[]{"a", "b", "c"}; //把数组转换成集合 List<String> list = Arrays.asList(arr); //生成stream流(串行流) Stream<String> stre