LambdaStream流操作


/**
Lambda表达式依赖于函数式接口 * * 对象排序 */ //Lambda表达式调用接口 public class lam9 { // rangeClosed(a,b) 返回子序列[a,b]左闭右开,意味着包括b元素,增长步值为1 // ange(a,b) 返回子序列[a,b),右闭右开,意味着不包括b // sum 计算所有元素总和 // sorted 排序元素(从小到大) // generate 生成 public static void main(String[] args) { //生成一个int流对象:此对象不能反复使用,只能一个使用 IntStream is =IntStream.of(10,20,30,40,50,60); is.forEach(System.out::println); //range不包含100,rangeClosed包含100 System.out.println(IntStream.rangeClosed(1,100).sum()); //生成三个5 System.out.println(IntStream.generate(()->5).limit(3).count()); IntStream i2 = IntStream.generate(()->{//生成必须要有返回值 Random rd =new Random(); return rd.nextInt(100)+1;//随机生成一个整数,1-100 //本来只是空,用limit截取10个数 }).limit(10); //输出 IntConsumer ic = (a)->{ System.out.printf("%d ",a); }; i2.forEach(ic); System.out.println(); IntStream.iterate(1, a->a+2).limit(5).forEach(ic); System.out.println(); IntStream.iterate(2, a->a+2).skip(3).limit(5).forEach(ic); System.out.println(); //IntStream 转换为 List<Integer> List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.stream().forEach(System.out::println);//把List<Integer>转换为IntStream }

二.

/**Lambda表达式依赖于函数式接口
 *
 * 对象排序
 */

//Lambda表达式调用接口
public class lam11 {
//    rangeClosed(a,b)    返回子序列[a,b]左闭右开,意味着包括b元素,增长步值为1
//    ange(a,b)    返回子序列[a,b),右闭右开,意味着不包括b
//    sum    计算所有元素总和
//    sorted 排序元素(从小到大)
//    generate 生成
    public static void main(String[] args) {
        int[] nums=new int[]{1,2,3,4,5,56};
        String[] num2=new String[]{"java","php","css"};
        System.out.println(Arrays.stream(nums).max().getAsInt());//OptionalInt:容器只能放一个
        System.out.println(Arrays.stream(nums).min().getAsInt());//getAsInt:获取为整数
        System.out.println(Arrays.stream(nums).count());//多少个值
        System.out.println(Arrays.stream(nums).sum());//
        System.out.printf("%.2f%n",Arrays.stream(nums).average().getAsDouble());//平均值

        Arrays.stream(nums).forEach(System.out::println);//输出,当场输出,没有返回值
        Arrays.stream(nums).forEach(e->System.out.printf("%02d ",e));//只有一个,f输出
        System.out.println("-----------------------------------------");

        Stream<String>ss=Stream.of("java","javascript","myaql","php");
        //筛选带有java的字符串,全部大写并遍历输出
        ss.filter(e->e.startsWith("java")).map(e->e.toUpperCase()).forEach(System.out::println);

        int[]nums2=new int[]{1,2,2,3,20,3,4,5,20,21};
        //转换为IntStream,并每个数加5
//        IntStream is =Arrays.stream(nums2).map(e->e+5);
        //设置条件,除以五等于零的数加五
//        Arrays.stream(nums2).forEach(System.out::println);
        IntStream is =Arrays.stream(nums2).map(e->e%5==0?e+5:e);//有返回值
        is.forEach(System.out::println);

        //输出10个.2的的小数
        //Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。
        //Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。
        double[] dd =new double[10];
        Arrays.stream(dd).map(e->Math.random()).forEach(e->System.out.printf("%.2f ",e));
        System.out.println();
        //distinct消除重复
        System.out.println(Stream.of(1,2,3,2,2,2,3,3,3).distinct().count());

        //归约:归约是将集合中的所有元素经过指定运算,折叠成一个元素输出,如:求最值、平均数等,这些操作都是将一个集合的元素折叠成一个元素输出。
        //将普通流转换成数值流
        /**
         * //reduce的用处:
         * 求集合元素只和
         * 求和
         */


        int num =6;
        IntStream zs =IntStream.rangeClosed(1,6);
        int ok =zs.reduce(1,(a,b)->a*b);
        System.out.println(ok);
        
        //字符串求和,所有元素合并
        Stream<String> aa = Stream.of("java","javascript");
        System.out.println(aa.reduce("",(a,b)->a.concat(b)));
        //“”+java+javascript
    }}

 

 

 

 

 

双精度拓展

      System.out.println("########一###############");
        DoubleStream.of(2.5,1.5,1.2,5.6).map(each->
                each+2
        ).forEach(each->{
            System.out.println(each);
        });
        System.out.println("########二average 计算平均值###############");
        double average = DoubleStream.of(2.0, 3.0, 4.0, 5.0).average().getAsDouble();
        System.out.println(average);

        System.out.println("########三 max 查找最大值###############");
        double aDouble = DoubleStream.of(2.0, 3.0, 4.0, 5.0).max().getAsDouble();
        System.out.println(aDouble);


        System.out.println("########四 选出大 x>=3  且  x<=4 的double值###############");
        DoubleStream.of(2.0, 3.0, 4.0, 5.0).filter(each->each>=3.0 && each<=4.0).forEach(System.out::print);

 

posted @ 2021-01-26 17:09  谷先生  阅读(173)  评论(0)    收藏  举报