Java8 新特性学习 Lambda表达式 和 Stream 用法案例

时间:2022-09-22 10:12:01

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 用法案例的更多相关文章

  1. java8新特性: lambda表达式:直接获得某个list&sol;array&sol;对象里面的字段集合

    java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合 比如,我有一张表: entity Category.java service CategoryServic ...

  2. 夯实Java基础(二十二)——Java8新特性之Lambda表达式

    1.前言 Java 8于14年发布到现在已经有5年时间了,经过时间的磨练,毫无疑问,Java 8是继Java 5(发布于2004年)之后的又一个非常最重要的版本.因为Java 8里面出现了非常多新的特 ...

  3. Java8新特性之Lambda表达式

    lambda表达式是java8给我们带来的几个重量级新特性之一,借用lambda表达式,可以让我们的java程序设计更加简洁.最近新的项目摒弃了1.6的版本,全面基于java8进行开发,本文是java ...

  4. Java8 新特性之Lambda表达式

    1. Lambda 表达式概述 Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递); Lambda 表达式可以写出更简洁,更灵活的代码 ...

  5. JDK1&period;8新特性&lpar;一&rpar; ----Lambda表达式、Stream API、函数式接口、方法引用

    jdk1.8新特性知识点: Lambda表达式 Stream API 函数式接口 方法引用和构造器调用 接口中的默认方法和静态方法 新时间日期API default   Lambda表达式     L ...

  6. 【Java8新特性】Lambda表达式基础语法,都在这儿了!!

    写在前面 前面积极响应读者的需求,写了两篇Java新特性的文章.有小伙伴留言说:感觉Lambda表达式很强大啊!一行代码就能够搞定那么多功能!我想学习下Lambda表达式的语法,可以吗?我的回答是:没 ...

  7. java8新特性之——lambda表达式的使用

    lambda表达式简介 个人理解,lambda表达式就是一种新的语法,没有什么新奇的,简化了开发者的编码,其实底层还是一些常规的代码.Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解 ...

  8. Java8 新特性&lpar;一&rpar;- Lambda 表达式

    2014年3月18日发布了JavaSE 8 不追求技术的新,追求技术的稳定 本质:Lambda 表达式是一个匿名函数 作用:简化代码,增强代码的表达力 Lambda 语法格式 // 格式1:无参无返回 ...

  9. java8 新特性学习笔记

    Java8新特性 学习笔记 1主要内容 Lambda 表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期 API 其他新特性 2 简洁 速度更快 修 ...

随机推荐

  1. &lbrack;原创&rsqb;Centos7 内部常用软件升级计划

    GCC 当前系统版本 gcc version 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)

  2. 学习笔记之 prim算法和kruskal算法

    ~. 最近数据结构课讲到了prim算法,然而一直使用kruskal算法的我还不知prim的思想,实在是寝食难安,于此灯火通明之时写此随笔,以祭奠我睡过去的数 据结构课. 一,最小生成树之prim pr ...

  3. rsync 目录 斜杠

    源: 不带:同步  目录和内容 带/: 只同步内容 target目录: 待. -Warv --delete -W, --whole-file            copy files whole ( ...

  4. fmri降噪,利用spatial&plus;temporal信息

    1.基于小波+高斯模型 <SPATIOTEMPORAL DENOISING AND CLUSTERING OF FMRI DATA>

  5. Java 简单算法--排序

    1. 冒泡排序 package cn.magicdu.algorithm; public class BubbleSort { public static void main(String[] arg ...

  6. HDOJ-ACM1015&lpar;JAVA&rpar; 运用 组合、全排列实现

    转载声明:原文转自:http://www.cnblogs.com/xiezie/p/5573934.html 这个题目的题意:(自己结合百度翻译,简单的翻译了一下) “这个项目是在一个在二楼图书馆一幅 ...

  7. winfrom存储txt日志函数

    参考微信支付SDK的代码,抽取出来的winform存储记事本日志函数: #region 存储日志 public string path = Application.StartupPath + &quo ...

  8. 在Android中建立Android project没有R&period;java文件

    最近在搞一下安卓,在新建Android工程,既然发现在gen目录下没有R.java这个文件.我当时感到很郁闷,上次建Android工程才好好的,怎么这次既然报错没有R.java.后来我用以下才解决了. ...

  9. Oracle检查与安装操作内容

    Oracle 安装: 检查安装包 rpm -q binutils compat-libstdc++ elfutils-libelf elfutils-libelf-devel elfutils-lib ...

  10. 【笔记】css浮动的一些个人见解

    看<css 权威指南>已经有差不多两个月时间了,正好最近读到浮动这一章写一写个人对立面的概念的一些见解吧. 说之前还真不得不说这本书卖之前以为会说得通俗易懂读后才发现其实有些概念从文意上理 ...