Java8实战,

 

Supplier

1,java

@FunctionalInterface
public interface Supplier<T> {编程

2,    T get();并发

3,app

Supplier<Apple> c1 = Apple::new
Apple a1 = c1.get();函数

 consumer接口

1,优化

@FunctionalInterface
public interface Consumer<T> {blog

2,void accept(T t);接口

3,主要用来输出的ip

 

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,基本概念

 流是“从支持数据处理操做的源生成的一系列元素”。
 流利用内部迭代:迭代经过filter、map、sorted等操做被抽象掉了。
 流操做有两类:中间操做和终端操做。
 filter和map等中间操做会返回一个流,并能够连接在一块儿。能够用它们来设置一条流 水线,但并不会生成任何结果。
 forEach和count等终端操做会返回一个非流的值,并处理流水线以返回结果。  流中的元素是按需计算的。
3,filter,筛选和切片
4,limit,skip
5,map,映射
  • flatMap
  •  

6,查找和匹配

  • anyMatch方法返回一个boolean,所以是一个终端操做。 
    if(menu.stream().anyMatch(Dish::isVegetarian)){
    System.out.println("The menu is (somewhat) vegetarian friendly!!"); }  

  • allMatch方法的工做原理和anyMatch相似,但它会看看流中的元素是否都能匹配给定的谓
  boolean isHealthy = menu.stream().allMatch(d -> d.getCalories() < 1000); 
  • 和allMatch相对的是noneMatch。
  boolean isHealthy = menu.stream()

  .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

相关文章
相关标签/搜索