Java8实战,
Supplier
1,
@FunctionalInterface
public interface Supplier<T> {
2, T get();
3,
Supplier<Apple> c1 = Apple::new
Apple a1 = c1.get();
consumer接口
1,
@FunctionalInterface
public interface Consumer<T> {
2,void accept(T t);
3,主要用来输出的

function 接口
1,public interface Function<T, R> {
2,T apply(F input);
3,主要是用来转换东西的
4,函数复合,
- andThen f.andThen(g) 数学上会写作g(f(x))
- compose f.compose(g); 数学上会写作f(g(x))
Predicate接口
1,充当一个参数化的返回Boolean比较方法
2,public interface Predicate<T> {
3,boolean test(T t);
4,能动态替换返回boolean的函数
5,基本类型装箱问题,
DoublePredicate
boolean test(double value);//有对应的原始类型特化接口



6,谓词复合,优先级从左到右a.or(b).and(c) == (a || b )&& c
- negate()
- and()
- or()
lambda用法
1,


2,


3,


4,基本lambda语法

5,基本用法

6,在面向资源编程的lambda,不需要重复打开资源和关闭资源



7,lambda也有匿名函数的问题

8,方法引用
- 静态方法引用,(例如Integer的parseInt方法,写作Integer::parseInt)。
- 实例方法引用,(例如String的length,String::length
- 方法体里面的方法引用,进一步的方法引用


9,比较器复合
- 翻转:list.sort(comparing(Object::getXXX).reveserd());
- 同样的时候添加第二个比较器,第二个是comparator类型, list.sort(Comparator.comparing(Integer::intValue).reversed().thenComparing(Integer::compareTo));
stream
1,更加简单的利用多cpu





2,基本概念
- flatMap



6,查找和匹配
- anyMatch方法返回一个boolean,因此是一个终端操作。
- allMatch方法的工作原理和anyMatch类似,但它会看看流中的元素是否都能匹配给定的谓
- 和allMatch相对的是noneMatch。
.noneMatch(d -> d.getCalories() >= 1000);
- findFirst和findAny
7,归约
- reduce ,
累加:int sum = numbers.stream().reduce(0, Integer::sum);
最大最小值:Optional min = numbers.stream().reduce(Integer::min);
8,并发的有状态和无状态

9,优化自动装箱,
- int calories = menu.stream() .mapToInt(Dish::getCalories) .sum();
- 自动装箱
IntStream intStream = menu.stream().mapToInt(Dish::getCalories)
Stream<Integer> stream = intStream.boxed();
10,小结

11,collect



Java8其他
1,default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
可以添加默认实现
2,在 java8 中的接口中不仅增加了默认方法,还增加了静态方法。使用方式接口名.方法名。
3,
@FunctionalInterface
public interface Runnable {表明是个函数接口
Java8重构小实例
1,策略模式,类似predicate替换策略
2,模板方法,
3,观察者模式,注册的时候写上方法
4,责任链模式,在注册的时候像观察者模式差不多
5,传统简单工厂,用map和supplier
Java8实战,的更多相关文章
- java8实战:filter的简单使用
<JAVA8实战>中的例子 要实现的功能:通过Apple的color或weight属性,对List<Apple>进行筛选. 1.首先定义com.owl.entity.Apple ...
- Java8实战及自己的总结
java8 介绍 java8是2014年3月份,由Oracle发布的一个版本,又称之为jdk1.8,是现再我们在学习和工作中用的最多的一个版本. 在jdk1.8中,java8以添加非常多的新特性, ...
- Java8实战——自己的总结
java8 介绍 java8是2014年3月份,由Oracle发布的一个版本,又称之为jdk1.8,是现再我们在学习和工作中用的最多的一个版本. 在jdk1.8中,java8以添加非常多的新特 ...
- Java8实战分享
虽然很多人已经使用了JDK8,看到不少代码,貌似大家对于Java语言or SDK的使用看起来还是停留在7甚至6. Java8在流式 or 链式处理,并发 or 并行方面增强了很多,函数式的风格使代码可 ...
- Java的演化-Java8实战笔记
一个语言要想一直有活力,它也需要跟随着时代的变化去进步,Java作为一个古老的语言,它其实有太多的历史包袱,在改变的过程中需要考虑很多,但是它也在慢慢的演变,巩固自己的城墙,不让自己被遗忘在历史中(不 ...
- java8实战二------lambda表达式和函数式接口,简单就好
一.Lambda 可以把Lambda表达式理解为简洁地i表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表.函数主体.返回类型,可能还是一个可以抛出的异常列表. 听上去,跟我们用的匿名类,匿名 ...
- java8实战一------解决冗杂,java8真的很便利(抛砖)
你的代码很容易因为需求而变化,对自己代码改来改去的你一定会觉得烦的.在我看来,java8很容易的解决了这个问题. 先来看看例子!在一堆苹果里,筛选绿色的苹果.当然,Apple类是这样子. class ...
- Java8实战系列一
从java7到java8,最主要的变化可以总结为 □Lambda表达式 □ 方法引用 □流和默认方法 让我们通过一个小例子感受一下 情景 1 集合对象排序 (对list中的苹果按照重量排序) Coll ...
- 读书笔记,《Java8实战》第一章,为什么要关心 Java8
开篇作者就提出,Java8所做的改变在许多方面比java历史上任何一次改变都深远.而且好消息是,这些改变会让你编辑程序来更容易,再也不用写类似类似于以前的swing中的事件处理函数的啰嗦代码了. ...
随机推荐
- Python35之包的创建
包(package) 一.创建一个文件夹,用于存放相关的模块,文件夹的名字即包的名字 二.在文件夹中创建一个__init__.py的模块文件,内容可以为空 三将相关的模块放入文件夹中 这样就相当于创建 ...
- PAT(B) 1064 朋友数(Java)
题目链接:1064 朋友数 (20 point(s)) 题目描述 如果两个整数各位数字的和是一样的,则被称为是"朋友数",而那个公共的和就是它们的"朋友证号". ...
- Android studio 3.1.3真机调试报错,no target device found
Android studio 3.1.2 的 Android monitor 改为 Android profiler,直接点这个就可以真机调试,在手机安装相应app 如果不行,报错,"no ...
- Oracle 11g xe版本---总结1
一.创建用户和授予权限 1.1 环境: Oracle 11g xe 第三方图形客户端: PLSQL Windows 10 必须登录 HR 用户,下面的查询会使用到 HR 中的表. 1.2 SQL 语句 ...
- 用ASP.NET Web API技术开发HTTP接口(一)
开发工具 Visual Studio 2013 SQL Server 2008 R2 准备工作 启动Visual Studio 2013,新建一个ASP.NET Web应用程序,命名为SimpleAP ...
- 在论坛中出现的比较难的sql问题:29(row_number函数 组内某列的值连续出现3次标记出来)
原文:在论坛中出现的比较难的sql问题:29(row_number函数 组内某列的值连续出现3次标记出来) 在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘 ...
- C# async 和 await 理解
C# async 和 await 理解 先假设如下场景: 主函数 Main,循环等待用户输入: 计算函数 Cal,耗时计算大量数据: class Test { static int Main(stri ...
- leetcode算法题(4)
问题描述: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 我的解答: package Simple; public class RoamnInt { public static ...
- python—各种常用函数及库
列表list1.append(x) 将x添加到列表末尾 list1.sort() 对列表元素排序 list1.reverse() 将 ...
- 【亲测有效】vs2017无法断点
解决方案: 一:设置为Debug模式 二:[工具]--[选项]--[调试]--[常规],取消打钩[要求源文件与原始版本完全匹配]