Java 8 Lambda演练

在工作中,我做了关于Java 8项目lambda的演示,当然还有一些简单的代码来说明其中的一些要点。 Java 8的总体原因是:

  • 更简洁的代码(适用于只有一种方法和集合的类)。 “我们希望代码的读者在到达lambda表达式的“实质”之前,必须尽可能地减少语法。 – Brian Goetz(http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html)
  • 能够传递功能,而不仅仅是数据
  • 更好地支持多核处理

所有示例都可以在从此处下载的以下Java 8版本上运行:

openjdk version "1.8.0-ea"
OpenJDK Runtime Environment (build 1.8.0-ea-lambda-nightly-h3876-20130403-b84-b00)
OpenJDK 64-Bit Server VM (build 25.0-b21, mixed mode)

最简单的情况:

public class ThreadA {public static void main(String[] args) {new Thread(new Runnable() {@Overridepublic void run() {System.err.println("Hello from anonymous class");}}).start();}}
public class ThreadB {public static void main(String[] args) {new Thread(() -> {System.err.println("Hello from lambda");}).start();}}

非正式地注意语法

()|x|(x,..,z) -> expr|stmt

箭头是新的运算符。 并注意第二段代码与第一段代码相比更为简洁。

集合:

首先让我介绍一个简单的领域和一些帮助者

public class Something {private double amount;public Something(double amount) {this.amount = amount;}public double getAmount() {return amount;}public String toString() {return "Amount: " + amount;}
}public class Helper {public static List<Something> someThings() {List<Something> things = new ArrayList<>();things.add(new Something(99.9));things.add(new Something(199.9));things.add(new Something(299.9));things.add(new Something(399.9));things.add(new Something(1199.9));return things;}}public interface Doer<T> {void doSomething(T t);}

让我们对Java 7样式进行一些过滤和排序:

public class CollectionA {public static void main(String... args) {List<Something> things = Helper.someThings();System.err.println("Filter");List<Something> filtered = filter(things);System.err.println(filtered);System.err.println("Sum");double sum = sum(filtered);System.err.println(sum);}public static List<Something> filter(List<Something> things) {List<Something> filtered = new ArrayList<>();for (Something s : things) {if (s.getAmount() > 100.00) {if (s.getAmount() < 1000.00) {filtered.add(s);}}}return filtered;}public static double sum(List<Something> things) {double d = 0.0;for (Something s : things) {d += s.getAmount();}return d;}}

现在是Java 8样式– 流式传输 :

import java.util.stream.Collectors;public class CollectionB {public static void main(String... args) {List<Something> things = Helper.someThings();System.err.println("Filter lambda");List<Something> filtered = things.stream().parallel().filter( t -> t.getAmount() > 100.00 && t.getAmount() < 1000.00).collect(Collectors.toList());System.err.println(filtered);System.err.println("Sum lambda");double sum = filtered.stream().mapToDouble(t -> t.getAmount()).sum();System.err.println(sum);}}

导入java.util.function。*接口和方法参考

public class CollectionC {public static void main(String... args) {List<Something> things = Helper.someThings();System.err.println("Do something");doSomething(things, new Doer<Something>() {@Overridepublic void doSomething(Something t) {System.err.println(t);}});}public static void doSomething(List<Something> things, Doer<Something> doer) {for (Something s : things) {doer.doSomething(s);}}}

将我们的Doer界面替换为标准的Consumer界面 (以前称为Block)

import java.util.function.Consumer;public class CollectionD {public static void main(String... args) {List<Something> things = Helper.someThings();System.err.println("Do something functional interfaces");consumeSomething(things, new Consumer<Something>() {@Overridepublic void accept(Something t) {System.err.println(t);}});System.err.println("Do something functional interfaces, using lambda");consumeSomething(things, (t) -> System.err.println(t));System.err.println("Do something functional interfaces, using lambda method reference (new operator ::) ");consumeSomething(things, System.err::println);System.err.println("Do something functional interfaces, using stream");things.stream().forEach(new Consumer<Something>() {@Overridepublic void accept(Something t) {System.err.println(t);}});System.err.println("Do something functional interfaces, using stream and method reference");things.stream().forEach(System.err::println);}public static void doSomething(List<Something> things, Doer<Something> doer) {for (Something s : things) {doer.doSomething(s);}}public static void consumeSomething(List<Something> things, Consumer<Something> consumer) {for (Something s : things) {consumer.accept(s);}}}

import java.util.List;
import java.util.NoSuchElementException;
import java.util.Optional;
import java.util.stream.Collectors;public class Various {public static void main(String... args) {List<Something> things = Helper.someThings();//MapSystem.err.println(things.stream().map((Something t) -> t.getAmount()).collect(Collectors.toList()));//Reducedouble d = things.stream().reduce(new Something(0.0), (Something t, Something u) -> new Something(t.getAmount() + u.getAmount())).getAmount();System.err.println(d);//Reduce againSystem.err.println(things.stream().reduce((Something t, Something u) -> new Something(t.getAmount() + u.getAmount())).get());//Map/reduceSystem.err.println(things.stream().map((Something t) -> t.getAmount()).reduce(0.0, (x, y) -> x + y));//LazyOptional<Something> findFirst = things.stream().filter(t -> t.getAmount() > 1000).findFirst();System.err.println(findFirst.get());//Lazy no valueOptional<Something> findFirstNotThere = things.stream().filter(t -> t.getAmount() > 2000).findFirst();try {System.err.println(findFirstNotThere.get());} catch (NoSuchElementException e) {System.err.println("Optional was not null, but its value was");}//Optional one step deeperthings.stream().filter(t -> t.getAmount() > 1000).findFirst().ifPresent(t -> System.err.println("Here I am"));}}

参考: Kim Saabye Pedersen的博客博客中的JCG合作伙伴 Kim Saabye Pedersen的Java 8 lambda演练 。

翻译自: https://www.javacodegeeks.com/2013/06/java-8-lambda-walkthrough.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚拟机vmnet0、vmnet1和vmnet8的区别

vmnet0&#xff0c;实际上就是一个虚拟的网桥 vmnet0&#xff0c;实际上就是一个虚拟的网桥&#xff0c;这个网桥有很若干个端口&#xff0c;一个端口用于连接你的Host&#xff0c;一个端口用于连接你的虚拟机&#xff0c;他们的位置是对等的&#xff0c;谁也不是谁的网关。所以…

uestc summer training #2

A 增广 #include<bits/stdc.h> using namespace std; const int MAXN 1000000 10; vector<int> g[MAXN]; int a[MAXN], b[MAXN], sz[MAXN], cnt[MAXN]; bool mg[MAXN], vis[MAXN]; int n, m; bool dfs(int u, int f -1) {if (g[u].empty()) //如果当前数没有位…

mysql有实例名这个概念,MySQL的一些概念笔记

1.MySQL Server、MySQL实例、MySQL数据库MySQL数据库指的是实际存在的物理操作系统文件的集合&#xff0c;也可以指逻辑数据的集合。为了访问、处理数据&#xff0c;我们需要一个数据库管理系统&#xff0c;也就是MySQL Server(也称为MySQL服务器)。MySQL实例指的是MySQL进程及…

OpenHFT Java Lang项目

OpenHFT / Java Lang从Apache 2.0库开始&#xff0c;提供Java Chronicle使用的低级功能&#xff0c;而无需持久存储到文件中。 这允许对数据进行可序列化和反序列化&#xff0c;以及对本机空间&#xff08;堆外&#xff09;中的内存的随机访问。它支持使用对象池写入和读取可枚…

spring cloud-spring boot 文档信息

官网&#xff1a; spring boot springcloud 学习资源 使用IDEA创建SpringBoot项目 Spring Boot教程 https://blog.csdn.net/forezp/article/details/70341818 Spring Cloud教程 http://blog.csdn.net/forezp/article/details/70148833 Spring Cloud教程 http://blog.csdn.net…

python基础学习笔记(十三)

re模块包含对 正则表达式。本章会对re模块主要特征和正则表达式进行介绍。 什么是正则表达式 正则表达式是可以匹配文本片段的模式。最简单的正则表达式就是普通字符串&#xff0c;可以匹配其自身。换包话说&#xff0c;正则表达式’python’ 可以匹配字符串’python’ 。你可以…

OD debug matlab,OllyDebug基本使用方法

OD是逆向过程中最好的动态调试工具&#xff0c;这次来记录学习笔记。(特别鸣谢石总)1、OD的工作界面最开始要学的就是界面的使用N了吧&#xff0c;这里分各个框来解释下&#xff1a;列举各个框用处&#xff1a;可以看到下面一框框东西&#xff1a;这些一时半会用不到&#xff0…

设计模式:策略

这次我想谈谈策略设计模式 。 通过这种方式&#xff0c;我开始撰写有关行为设计模式的文章。 这些模式表示对象之间的某些交互模式&#xff0c;以使代码更灵活且组织得更好。此方法的最本质点是对象之间的松散耦合。 当您的应用程序中有多个实现目的的实现时&#xff0c;应使用…

css 学习整理

1、 background-attachment :fixed 属性防止背景图片这种滚动&#xff0c;它默认值是 scroll&#xff0c;也就是说&#xff0c;在默认的情况下&#xff0c;背景会随文档滚动2、font-weight 属性设置文本的粗细&#xff08;关键字 100 ~ 900 为字体指定了 9 级加粗度。如果一个字…

php抓取网页中的内容

以下就是几种常用的用php抓取网页中的内容的方法。1.file_get_contentsPHP代码代码如下:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&g…

本地搭建WordPress (XAMPP环境)

1&#xff0c;XAMPP是一个流行的PHP开发环境&#xff0c;官网下载&#xff1a; https://www.apachefriends.org/zh_cn/index.html 然后安装。 官方介绍&#xff1a;XAMPP是最流行的PHP开发环境 XAMPP是完全免费且易于安装的Apache发行版&#xff0c;其中包含MariaDB、PHP和Pe…

php中的thumb函数,phpcms v9 thumb(缩略图) 函数说明

打开phcmsc/libs/functions/global.func.PHP文件&#xff0c;找到如下代码&#xff1a;$width_t || $height>$height_t) return $imgurl;$newimgurl dirname($imgurl_replace)./thumb_.$width._.$height._.basename($imgurl_replace);if(file_exists($upload_path.$newimgu…

CSS3 选择器——属性选择器

上一节在《CSS3选择器——基本选择器》中主要介绍了CSS3选择器的第一部分&#xff0c;这节主要和大家一起来学习CSS3选择器的第二部分——属性选择器。属性选择器早在CSS2中就被引入了&#xff0c;其主要作用就是对带有指定属性的HTML 元素设置样式。使用CSS3属性选择器&#x…

设计模式:生成器

有时需要在应用程序中创建一个复杂的对象。 一种解决方案是Factory模式&#xff0c;另一种是Builder设计模式。 在某些情况下&#xff0c;您甚至可以结合使用这两种模式。 但是在本文中&#xff0c;我想研究一下Builder设计模式 。 我需要说的第一件事是创造模式。 在什么情况…

Hadoop(5)--java编写hdfs程序

1、hdfs系统会把用到的数据存储在core-site.xml中由hadoop.tmp.dir指定&#xff0c;而这个值默认位于/tmp/hadoop-${user.name}下面&#xff0c; 由于/tmp目录在系统重启时候会被删除&#xff0c;所以应该修改目录位置。 修改core-site.xml(在所有站点上都修改) <property&g…

oracle10g服务安装图解,Oracle 10G服务器安装图解

Oracle 10G服务器安装图解Oracle 10g 在window 下的安装概述1.数据库概述Oracle 应用服务器 10g 是集成的、基于标准的软件平台&#xff0c;Oracle Application Server 10g 是继 Oracle9i Application Server (Oracle9iAS) Release 2.0 version 9.0.2 和 version 9.0.3 之后的最…

Java 7试用资源

Java 7为完成使用后需要关闭的资源&#xff08;例如文件&#xff0c;流&#xff0c;数据库连接和套接字&#xff09;提供了更好的资源管理。 这种语言构造称为try-with-resources语句。 完成这项工作的机制称为AutoCloseable接口。 Java 7资源类均实现此接口。 该接口的签名如下…

css平行四边形与菱形变换

*以下技巧均源自于Lea Verou所著《CSS Secrets》 平行四边形 平行四边形的构造可以基于矩形通过skew()的变形属性进行斜向拉升得到&#xff08;skew所用的坐标系&#xff0c;纵向是X轴&#xff0c;横向是Y轴&#xff0c;与常见的坐标系相反&#xff09;。 <!DOCTYPE html&g…

redis 启动配置文件加载报错 service redis does not support chkconfig

# chkconfig:2345 90 10 # description:Redis is a persistent key-value database 网上资料 上面的注释的意思是&#xff0c;redis服务必须在运行级2&#xff0c;3&#xff0c;4&#xff0c;5下被启动或关闭&#xff0c;启动的优先级是90&#xff0c;关闭的优先级是10。 附录&…

Android 获取ROOT权限原理解析

一、 概述本文介绍了android中获取root权限的方法以及原理&#xff0c;让大家对android玩家中常说的“越狱”有一个更深层次的认识。二、 Root的介绍1. Root 的目的可以让我们拥有掌控手机系统的权限&#xff0c;比如删除一些system/app下面的无用软件&#xff0c;更换开…