Java 8 Stream

package com.lambda;

import java.util.Arrays;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;

/**
     Stream
 * @author qjw
 * @version V1.0
 * @since 2021-12-02 09:14:00
 */
public class Practice {
    public static void main(String[] args) {
          //建立一个数组1, 23, 4, 4, 22, 34, 45, 11, 33使用 lambda 求出数组中的最小数将数组去重,
          // 并将去重后数组的每个元素乘以 2,再求出乘以 2 后的数组的和,比如数组1,2,3,3,去重后为1,2,3,乘以 2 后为2,4,6,最后的和为12。
        int[] arr =new int[]{1, 23, 4, 4, 22, 34, 45, 11, 33};
        System.out.println("最小值:"+ Arrays.stream(arr).min());
        System.out.println("数组去重*2求和:"+Arrays.stream(arr).distinct().map((i)->i*2).sum());
        Arrays.stream(arr).sorted().forEach(System.out::println);

        //Stream 提供了新的方法 'forEach' 来迭代流中的每个数据
        Random random=new Random();
        random.ints().limit(10).forEach(System.out::println);

        //filter 方法用于通过设置的条件过滤出元素
        List<String> strings=Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
        System.out.println("原list:"+strings);
        List<String> filtered = strings.stream().filter(String -> !String.isEmpty()).collect(Collectors.toList());
        long count = strings.parallelStream().filter(String -> !String.isEmpty()).count();
        String mergedString  = strings.stream().filter(String -> String.isEmpty()).collect(Collectors.joining(","));
        List<String> collect = strings.stream().filter(String -> String.length() == 3).collect(Collectors.toList());
        System.out.println("长度为3的字符串:"+collect);
        System.out.println("过滤后串行list:"+filtered);
        System.out.println("过滤后list长度:"+count);
        System.out.println("合并字符串:"+mergedString);

        //map 方法用于映射每个元素到对应的结果 求平方
        List<Integer> numbers=Arrays.asList(3, 2, 2, 3, 7, 3, 5);
        System.out.println("原list:"+numbers);
        List<Integer> integerList = numbers.stream().map(i -> i * i).collect(Collectors.toList());
        System.out.println("平方后list:"+integerList);

        //另外,一些产生统计结果的收集器也非常有用。它们主要用于int、double、long等基本类型上,它们可以用来产生类似如下的统计结果。
        IntSummaryStatistics statistics = numbers.stream().mapToInt((x) -> x).summaryStatistics();
        System.out.println("最大数:"+statistics.getMax());
        System.out.println("最小数:"+statistics.getMin());
        System.out.println("之和:"+statistics.getSum());
        System.out.println("平均数:"+statistics.getAverage());
        //sorted 方法用于对流进行排序
        random.ints().limit(10).sorted().forEach(System.out::println);
    }
}

结果:
最小值:OptionalInt[1]
数组去重*2求和:346
1
4
4
11
22
23
33
34
45
1913447005
87408902
-737480927
-958413226
-839326373
-1914034805
-417534561
-104999651
2008638734
-2087729471
原list:[abc, , bc, efg, abcd, , jkl]
长度为3的字符串:[abc, efg, jkl]
过滤后串行list:[abc, bc, efg, abcd, jkl]
过滤后list长度:5
合并字符串:,
原list:[3, 2, 2, 3, 7, 3, 5]
平方后list:[9, 4, 4, 9, 49, 9, 25]
最大数:7
最小数:2
之和:25
平均数:3.5714285714285716
-1718478674
-229033118
165204701
281266492
937092126
1071271851
1123267459
1508069104
1598363878
1621817844

posted @ 2021-12-02 14:47  johnson8888  阅读(26)  评论(0)    收藏  举报