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. JVM学习(六)JVM常见知识问答

    文章更新时间:2020/04/21 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java虚拟机是一个可以执行Java字节码的虚拟机进程. Java源文 ...

  2. Spring Cloud各组件学习

    Spring-Cloud 介绍 SpringCloud各个组件详解,因为SpringCloud部分组件停止更新,故本项目包含原SpringCloud(基于SpringCloud H版和SpringBo ...

  3. 这10道springboot常见面试题你需要了解下

    ​ 1.什么是Spring Boot? 多年来,随着新功能的增加,spring变得越来越复杂.只需访问https://spring.io/projects页面,我们就会看到可以在我们的应用程序中使用的 ...

  4. 《Linux从入门到精通》笔记

    第一篇 基础篇   第1章 Linux概述 1.1 Linux的起源 1991年芬兰学生Linus Torvalds写的磁盘驱动和文件系统开源发布,Linux即"Linus的Minix&qu ...

  5. websocket+sockjs+stompjs详解及实例

    最近有项目需求要用到websocket,刚开始以为很简单,但是随着遇到问题,深入了解,才知道websocket并不是想象中的那么简单,这篇文章主要是考虑websocket在客户端的使用. 1.http ...

  6. Apache Shiro 1.3.2入门

    简介 Apache Shiro是一个功能强大且灵活的开放源代码安全框架,可以清楚地处理认证,授权,企业会话管理和加密.Apache Shiro的首要目标是易于使用和理解.有时候安全性可能非常复杂和痛苦 ...

  7. Centos-bzip2压缩文件-bzip2 bunzip2

    bzip2 buzip2 对文件进行压缩与解压缩,类似 gzip gunzip命令,只能压缩文件,对目录则压缩目录下文件,生成以 .bz2为扩展名的文件 相关选项 -d 解压 -v 压缩或解压显示详细 ...

  8. python 系统设置

    1. 设置python运行环境为utf-8 import sys #引用sys模块 reload(sys) #重新加载sys sys.setdefaultencoding("utf-8&qu ...

  9. Leetcode-dfs & bfs

    102. 二叉树的层次遍历 https://leetcode-cn.com/problems/binary-tree-level-order-traversal/ 给定一个二叉树,返回其按层次遍历的节 ...

  10. 035 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 02 多重if结构

    035 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 02 多重if结构 本文知识点:Java中的多重if结构 选择结构回顾 if选择结构 注意: 1.条 ...