public class Test04 {
public static void main(String[] args) {
/*
* Java8中,有一个新的类:Stream类型,它代表一个数据加工流
* java.util.stream.Stream<T>接口
* static <T> Stream<T> generate(Supplier<T> s)
*
* 这个静态方法的形参:Supplier<T>供给型接口的类型,可以使用Lambda表达式赋值
* 接口的静态方法通过“接口名.静态方法”调用
*
* Supplier<T>接口
* (1)抽象方法 T get()
* (2)抽象方法如何实现
* 例如:在抽象方法中实现,随机产生一个小数[0,1),返回值类型double
*/
// Stream<Double> stream = Stream.generate(() -> {return Math.random();});
//优化
Stream<Double> stream = Stream.generate(()->Math.random()); /*
* 再调用Stream<T>接口的void forEach(Consumer<? super T> action)输出数据
* 这个方法形参是Consumer<T>消费型接口类型,SAM接口,也可以使用Lambda表达式赋值
*
* Consumer<T>消费型接口:
* (1)抽象方法
* void accept(T t)
* (2)如何实现抽象方法
* 例如:打印流中的元素
*
*/
// stream.forEach((Double num) -> {System.out.println(num);});
//优化
stream.forEach(num -> System.out.println(num));
}
}


public class Test05 {

    /*
* JDK1.8时Map接口增加了一个方法:
* default void replaceAll(BiFunction<? super K,? super V,? extends V> function)
*/
//把原来售价低于5元的,修改为为5元,其他的不变
/*
* replaceAll(BiFunction<? super K,? super V,? extends V> function)
*
* replaceAll的形参是BiFunction<T,U,R>接口类型,SAM接口,可以使用Lambda表达式赋值
*
* BiFunction<T,U,R>接口:
* (1)抽象方法
* R apply(T t, U u)
* (2)如何实现抽象方法
* 例如:把原来commodity对象的售价<5元的替换(覆盖)为薪5元
*
* 如果抽象方法有返回值,那么实现抽象方法时,需要return语句。
* 这里看返回值类型是V类型,是commodity的类型
*/
public static void main(String[] args) {
HashMap<String,Commodity> commodityMap = new HashMap<>();
commodityMap.put("苹果",new Commodity("苹果",5.0));
commodityMap.put("香蕉",new Commodity("香蕉",3.0));
commodityMap.put("雪梨",new Commodity("雪梨",2.0));
commodityMap.put("石榴",new Commodity("石榴",4.0)); commodityMap.forEach((key,fruitsMap)->{
System.out.print("水果:"+fruitsMap.getName());
System.out.println("价格:"+fruitsMap.getPrice()+"元");
});
System.out.println("--------同一价格后--------");

//        commodityMap.replaceAll((String key,Commodity commodity)->{
// if(commodity.getPrice()<5.0){
// commodity.setPrice(5.0);
// }
// return commodity;
// });


//优化
commodityMap.replaceAll((key,commodity)->{
if(commodity.getPrice()<5.0){
commodity.setPrice(5.0);
}
return commodity;
}); commodityMap.forEach((key,fruitsMap)->{
System.out.print("水果:"+fruitsMap.getName());
System.out.println("价格:"+fruitsMap.getPrice()+"元");
});
}
}
class Commodity{
private String name;
private Double price; public Commodity(String name, Double price) {
this.name = name;
this.price = price;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Double getPrice() {
return price;
} public void setPrice(Double price) {
this.price = price;
} }

Lambda表达式(三)的更多相关文章

  1. C# 从CIL代码了解委托,匿名方法,Lambda 表达式和闭包本质

    前言 C# 3.0 引入了 Lambda 表达式,程序员们很快就开始习惯并爱上这种简洁并极具表达力的函数式编程特性. 本着知其然,还要知其所以然的学习态度,笔者不禁想到了几个问题. (1)匿名函数(匿 ...

  2. [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口

    函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...

  3. java8函数式接口详解、函数接口详解、lambda表达式匿名函数、方法引用使用含义、函数式接口实例、如何定义函数式接口

    函数式接口详细定义 函数式接口只有一个抽象方法 由于default方法有一个实现,所以他们不是抽象的. 如果一个接口定义了一个抽象方法,而他恰好覆盖了Object的public方法,仍旧不算做接口的抽 ...

  4. python函数,lambda表达式,三目运算,列表解析,递归

    一.自定义函数 定义函数时,函数体不执行:只有在调用函数时,函数体才执行.函数的结构: 1. def 2. 函数名 3. 函数体 def func_name(): 函数体 4. 返回值 如果没有声明返 ...

  5. 第三天 函数 三元运算 lambda表达式 内置函数 文件操作

    面向过程: 直接一行一行写代码,遇到重复的内容复制黏贴. 不利于代码阅读 代码没有复用 面向对象 将代码块定义为函数,以后直接调用函数 增强了复用性 函数的定义方法 def 函数名(传递参数): 函数 ...

  6. JAVA 8 主要新特性 ----------------(三)新功能Lambda表达式入门

    一.简述       Java为了扩充匿名方法在1.8中新追加的特性.本身Java之前的版本是没有匿名方法的,只有匿名对象. 二.使用        Java中使用匿名方法必须要对应接口中的一个抽象方 ...

  7. 读书笔记,《Java 8实战》,第三章,Lambda表达式

    第一节,Lambda管中窥豹    可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式,它没有名称,但它有参数列表.函数主题和返回值.    本节介绍了Lambda表达式的语法,它包括 ...

  8. LINQ教程三:Lambda表达式解剖

    C#3.0(.NET3.5)中引入了Lambda表达式和LINQ.Lambda表达式是使用一些特殊语法表示匿名方法的较短方法. 最基本的Lambda表达式语法如下: (参数列表)=>{方法体} ...

  9. c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)

    c#封装DBHelper类   public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...

  10. 三 lambda表达式有什么用

    (转载: https://mp.weixin.qq.com/s/-PHOc6p-qKJBktle28AUgA) 一: 直接把代码块赋值给变量 我们知道,对于一个Java变量,我们可以赋给其一个“值”. ...

随机推荐

  1. FreeSWITCH 处理Refer盲转时,UUI传递不对(没有将SIP 消息头Refer-To中的User-to-User传递给B-Leg)

    运行环境:     CentOS 7.6     FreeSWICH 1.6.18   一.问题场景:     FreeSWITCH收到REFER命令后,重新发起的INVITE消息中的 "U ...

  2. 1500多套微信小程序带后端源码-史上最全的不同行业的源码集合

    如何下载获取在最后面! 部分源码 部分源码 部分源码 部分截图 o2o行业 | - 盒马鲜生 | - 轻客洗衣 互联网行业 | - 云文档 | - 仿ofo共享单车 | - 仿美团外卖 | - 仿饿了 ...

  3. python中获取中位数

    普通方法: 对列表进行排序,然后根据长度为奇数或者偶数的不同情况计算中位数 def huahua(x): length = len(x) print(length) x.sort() print(x) ...

  4. 每日爬虫JS小逆之5分钟旅游网MD5一锅端

    来吧骚年,每天花5分钟锻炼一下自己的JS调试也是极好的,对后期调试滑块验证码还原.拖动很有帮助,坚持下去,我们能赢.建议亲自试试哦,如果对大家有帮助的话不妨关注一下知识图谱与大数据公众号,当然不关注也 ...

  5. matlab一个figure画多个子图,和多个figure画多个图。

    参考:https://blog.csdn.net/xiaotao_1/article/details/79024488 1,一个figure画多个子图: figure(10) % define fig ...

  6. C++ 异常处理 catch(...)介绍

    转载:https://blog.csdn.net/fcsfcsfcs/article/details/77717567 catch(-)能够捕获多种数据类型的异常对象,所以它提供给程序员一种对异常 对 ...

  7. arduino 动态内存不足问题

    亲测有用, 参考:https://blog.csdn.net/weixin_33915554/article/details/86975847 如果在代码中使用到一个数组,但是数组容量超过20000个 ...

  8. CF149D Coloring Brackets

    CF149D Coloring Brackets Link 题面: 给出一个配对的括号序列(如"\((())()\)"."\(()\)"等, "\() ...

  9. WJQ与机房

    sample input 5 6 7 2 3 1 1 5 0 6 0 0 8 6 6 5 3 4 3 7 8 2 4 0 0 6 9 sample output 20 样例解释: 分别以(2,1)为左 ...

  10. 【题解】X龙珠

    明天好像要考链表今晚笔者来了解下. 题目链接 解: 对于这道题,由于前面要与后面重新连起来,于是我们考虑链表. 我们先正常用链表维护关系.然后,我们从大到小枚举. 对于这个数,如果它后面有数(因为是一 ...