Java8 新特性学习 Lambda表达式 和 Stream 用法案例
Java8 新特性学习 Lambda表达式 和 Stream 用法案例
学习参考文章: https://www.cnblogs.com/coprince/p/8692972.html
1.使用lambda代理匿名内部类
//不用lambda
new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("java 8 lambda 匿名类");
            }
        }).start();
//使用lambda
        new Thread(()->{
            System.out.println("java 8 lambda 匿名类");
        }).start();
输出结果:
java 8 lambda 匿名类
java 8 lambda 匿名类
2.使用lambda表达式对列表进行迭代
//不用lambda
        List<String> strings = Arrays.asList("java", "go", "python", "php");
        for (String string : strings) {
            System.out.print(string+"\t");
        }
        System.out.println();
        //使用lambda
        strings.forEach((str) -> System.out.print(str+"\t"));
输出结果
java	go	python	php
java	go	python	php
3.使用lambda表达式和函数式接口Predicate
//不用lambda表达式
        ArrayList<User> users = new ArrayList<>();
        users.add(new User("xiaoming",23));
        users.add(new User("daming",26));
        Collections.sort(users, new Comparator<User>() {
            @Override
            public int compare(User o1, User o2) {
                return o1.getAge().compareTo(o2.getAge());
            }
        });
        for (User user : users) {
            System.out.println(user);
        }
        //使用lambda表达式
        Collections.sort(users,(o1,o2)->{
            return o1.getAge().compareTo(o2.getAge());
        });
        users.forEach(System.out::println);
输出结果:
User{name='xiaoming', age=23}
User{name='daming', age=26}
User{name='xiaoming', age=23}
User{name='daming', age=26}
4.使用lambda表达式,并且加入多个Predicate
//          多个Predicate 组合使用  and or
        List<String> languages2 = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp");
        Predicate<String> predicate1 = (n) -> n.startsWith("S");
        Predicate<String> predicate2 = (m) -> m.endsWith("l");
        languages2.stream().filter(predicate1.or(predicate2)).forEach((n) -> {
            System.out.println(n);
        });
输出结果:
Java
Scala
Haskell
5.使用lambda表达式的Map示例
//          函数式编程 map
        //不适用lambda表达式
        Integer[] price = {100,200,300,400};
        List<Integer> prices = Arrays.asList(price);
        for (Integer dou : prices) {
            System.out.println(dou + .12 * dou);
        }
        System.out.println("使用lambda:");
        prices.stream().map((num) -> (.12*num+num)).forEach((n)->{
            System.out.println(n);
        });
输出结果:
112.0
224.0
336.0
448.0
使用lambda:
112.0
224.0
336.0
448.0
1120.0
6.使用lambda表达式的Reduce示例
//          函数式编程 reduce  将所有的值合并
        //不适用lambda
        Integer[] price2 = {100,200,300,400};
        List<Integer> integers2 = Arrays.asList(price);
        Double total = 0d;
        for (Integer integer : integers2) {
            total += integer + .12 * integer;
        }
        System.out.println(total);
        System.out.println("使用lambda");
        Double aDouble = integers2.stream().map((num) -> (num + .12 * num)).reduce((total1, total2) -> total1 + total2).get();
        System.out.println(aDouble);
输出结果:
1120.0
使用lambda
1120.0
7.通过过滤创建一个String列表
List<String> languages3 = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp");
        List<String> collect = languages3.stream().filter(x -> x.length() > 4).collect(Collectors.toList());
        System.out.println(collect);
输出结果:
[Scala, Haskell]
8.对列表的每个元素应用函数
//          collect(Collectors.joining(", "));将字符串根据规则转换
        List<String> languages4 = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp");
        String collect2 = languages4.stream().map(x -> (x.toUpperCase())).collect(Collectors.joining(","));
        System.out.println(collect2);
输出结果:
JAVA,SCALA,C++,HASKELL,LISP
9.distinct() 去重
//          distinct()  去重
        Integer[] aaa = {1,1,2,2,3,3,4,5,6,1,23,44,32};
        List<Integer> integers1 = Arrays.asList(aaa);
        List<Integer> collect3 = integers1.stream().distinct().collect(Collectors.toList());
        System.out.println(collect3);
输出结果:
[1, 2, 3, 4, 5, 6, 23, 44, 32]
10.计算最大值最小值总和 平均值
 //          计算最大值最小值总和 平均值
        IntSummaryStatistics intSummaryStatistics = integers1.stream().mapToInt(x -> x).summaryStatistics();
        System.out.println(intSummaryStatistics.getCount());
        System.out.println(intSummaryStatistics.getAverage());
        System.out.println(intSummaryStatistics.getMax());
        System.out.println(intSummaryStatistics.getMin());
        System.out.println(intSummaryStatistics.getSum());
输出结果:
13
9.76923076923077
44
1
127
Java8 新特性学习 Lambda表达式 和 Stream 用法案例的更多相关文章
- java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合
		java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合 比如,我有一张表: entity Category.java service CategoryServic ... 
- 夯实Java基础(二十二)——Java8新特性之Lambda表达式
		1.前言 Java 8于14年发布到现在已经有5年时间了,经过时间的磨练,毫无疑问,Java 8是继Java 5(发布于2004年)之后的又一个非常最重要的版本.因为Java 8里面出现了非常多新的特 ... 
- Java8新特性之Lambda表达式
		lambda表达式是java8给我们带来的几个重量级新特性之一,借用lambda表达式,可以让我们的java程序设计更加简洁.最近新的项目摒弃了1.6的版本,全面基于java8进行开发,本文是java ... 
- Java8 新特性之Lambda表达式
		1. Lambda 表达式概述 Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递); Lambda 表达式可以写出更简洁,更灵活的代码 ... 
- JDK1.8新特性(一) ----Lambda表达式、Stream API、函数式接口、方法引用
		jdk1.8新特性知识点: Lambda表达式 Stream API 函数式接口 方法引用和构造器调用 接口中的默认方法和静态方法 新时间日期API default Lambda表达式 L ... 
- 【Java8新特性】Lambda表达式基础语法,都在这儿了!!
		写在前面 前面积极响应读者的需求,写了两篇Java新特性的文章.有小伙伴留言说:感觉Lambda表达式很强大啊!一行代码就能够搞定那么多功能!我想学习下Lambda表达式的语法,可以吗?我的回答是:没 ... 
- 【Java8新特性】- Lambda表达式
		Java8新特性 - Lambda表达式 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! ... 
- java8新特性之——lambda表达式的使用
		lambda表达式简介 个人理解,lambda表达式就是一种新的语法,没有什么新奇的,简化了开发者的编码,其实底层还是一些常规的代码.Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解 ... 
- Java8 新特性(一)- Lambda 表达式
		2014年3月18日发布了JavaSE 8 不追求技术的新,追求技术的稳定 本质:Lambda 表达式是一个匿名函数 作用:简化代码,增强代码的表达力 Lambda 语法格式 // 格式1:无参无返回 ... 
随机推荐
- An easy problem (位运算)
			[题目描述] 给出一个整数,输出比其大的第一个数,要求输出的数二进制表示和原数二进制表示下1的个数相同. [题目链接] http://noi.openjudge.cn/ch0406/1455/ [算法 ... 
- emit写了个实体转换程序
			就我自己知道的,automapper是常用的,还是比较合适好用.不过我一般采用MVVM模式,其实就是简单的model名称不同而已,而这些转换器升级,扩展的很多,功能丰富,但是我用不到啊,又不能按照自己 ... 
- CSS-02 BFC的理解
			两个概念 感觉BFC挺重要的,于是最近查阅网上资料后小结一下,如果有不对的地方还望指正. 先理解两个概念: BOX :盒子模型 Block-Leave Box :块级元素 display属性为bloc ... 
- 基于英伟达Jetson TX1的GPU处理平台
			基于英伟达Jetson TX1 GPU的HDMI图像输入的深度学习套件 [309] 本平台基于英伟达的Jetson TX1视觉计算的全功能开发板,配合本公司研发的HDMI输入图像采集板:Jetson ... 
- React(4) --引入图片及循环数据
			引入图片的方法 1.引入本地图片 方法1: import logo from '../assets/images/1.jpg'; <img src={logo} /> 方法2: <i ... 
- Git--08  Jenkins
			目录 Jenkins 01. 安装准备 02 .安装Jdk和Jenkins 03 .配置Jenkins 04. 插件安装 05. 创建项目 06. Jenkins获取Git源代码 07. 立即构建获取 ... 
- VS基本教程
			首先打开vs,点击工具栏,文件----新建----项目 然后依次选择Visual C++----空项目-----命名---项目存放路径 接下来在解决方案资源管理器中选中源文件,右键----添加---- ... 
- openstack创建一个虚拟机的过程
			为什要用云? 一.简单的说就是对资源更加合理的分配,使用,比如硬件的数量,带宽等等这些,因为你不能机器买来不需要了再卖掉(当然也可以),带宽跟机房签合同得来一年的,中间不够了也不能加,超了也不退钱 ... 
- 分组函数 partition by 的详解,与order by 区别
			partition by关键字是分析性函数的一部分,它和聚合函数(如group by)不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录, partition by ... 
- javaScript的关键字与保留字
			JavaScript 关键字: break case catch continue default delete do else finally for function if in instance ... 
