Java8新特性——Lambda表达式

关于lambda,可以看这篇文章,作者说的很详细:

https://www.cnblogs.com/linlinismine/p/9283532.html

涉及的概念: 数据并行 ,双冒号的使用

下面是自己测试的代码:

 //lambda的使用
    public static void main(String[] args) {
        //(s) -> System.out.println(s);    lambda表达式方法的执行逻辑
        //Consumer函数式接口只有一个accept方法
        //将lambda表示的执行过程赋值给consumer,相当于重写了accept方法.     lambda相当于一个实现类了
        Consumer consumer= (s) -> System.out.println(s);
        consumer.accept("ssss");

        //lambda的应用场景
        //1.代替匿名内部类
        Thread t1=new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("no use lambda");
            }
        });
        t1.run();

        Thread t2=new Thread(()-> System.out.println("use lambda"));
        t2.run();

        //2.以流水线的方式处理数据
        //Collectors-实现了很多归约操作,例如将流转换成集合和聚合元素,Collectors可用于返回列表和字符串
        //filter-按条件过滤
        List integers= Arrays.asList(4,3,6,1,2,5);
        List evens = integers.stream().filter(i -> i % 2 == 0).collect(Collectors.toList());
        //forEach-输出
        evens.forEach(System.out::println);
        //sorted-按照从小到大排列
        evens.stream().sorted().forEach(System.out::println);
        //从大到小排列
        evens.stream().sorted((x,y)->{return y.compareTo(x);}).forEach(System.out::println);
        //map-映射出每个元素的结果
        evens.stream().map(i->i*i).collect(Collectors.toList()).forEach(System.out::println);
        //limit-获取指定数量
        evens.stream().limit(1).collect(Collectors.toList());

        //count-统计数量
        long count = evens.stream().count();
        //parallelStream-并行流
        long count1 = evens.parallelStream().count();

        //双冒号的用法
        List lists=new ArrayList<>();
        lists.add("abC");
        lists.add("aBc");
        //将所有的字符变为大写
        lists.stream().map(String->String.toUpperCase()).collect(Collectors.toList()).forEach(System.out::println);
        //类名::方法名         构造- 类名::new
        lists.stream().map(String::toUpperCase).collect(Collectors.toCollection(ArrayList::new)).forEach(System.out::println);

        //3.更简单的数据并行处理
        //所谓数据并行是指把数据划分成若干块分别映像到不同的处理机上,每一台处理机运行同样的处理程序对所分派的数据进行处理。
        //计算机内包含一组处理单元(PE),每一个处理单元存储一个(或多个)数据元素。当机器执行顺序程序时,可对应于全部或部分的内部处理单元所存的数据同时操作。
        // 数据并行处理,只需要在原来的基础上加一个parallel()就可以开启~。顺便提一下这里parallel()开启的底层并行框架是fork/join,默认的并行数是Ncpu个。
        List collect = evens.stream().parallel().map(i -> i * i).collect(Collectors.toList());

        //4.内部迭代取代外部迭代
        //描述要干什么,而不是怎么干;不一定需要顺序list中的元素
        collect.stream().forEach(n-> System.out.println(n));
    }

 

你可能感兴趣的:(java基础)