美文网首页
java8实战

java8实战

作者: sundern | 来源:发表于2018-09-02 14:23 被阅读8次

    术语:

    1.函数式编程:代码传递给方法的一整套编程技巧

    看完本书能了解到的:

    --stream

        --Stream API

        --IntStream/DoubleStream/LongStream

        --各种用流收集数据的应用(待充电):规约汇总、分组、分区、收集器接口

        --Stream并行

    --代码传递

        --lambda

        --函数式接口、方法引用、构造方法引用(待充电)

        --各种复合:比较器复合、谓词复合、函数复合(待充电)

    --Optional(待充电)

    1.Stream API

    筛选:filter(Class:isXXX())

    消重:distinct()

    截短:limit(2)

    跳过:skip(2)

    扁平化:map(Class:getXXX())--eg. map(String:length)

    word = ["Hello","World"]

    map(word->word.split("")) ~~~~~{[H,e,l,l,o],[W,o,r,l,d]} Stream

    flatMap(word->word.split(""))~~~~~{H,e,l,l,o,W,o,r,l,d} Stream

    至少一个匹配:anyMatch(Class:isXXX())

    所有全部匹配:allMatch(Class:isXXX())

    没有任何匹配:noneMatch(Class:isXXX())

    返回任意元素:findAny()

    返回第一元素:findFirst()

    规约:reduce(0,Integer:sum)  =   reduce(0,(a,b) -> (a+b))

    reduce(Integer:max) = reduce((x,y) -> x>y?x:y)

    reduce(Integer:min) = reduce((x,y) - x

    收集元素:collect(toList())

    2.数值流

    (1).Stream转化为IntStream:stream().mapToInt(Class:getXXX)

    (2).IntStream转化为Stream:intStream.boxed()

    (3).数值流操作:sum(),max(),rangClose(),range()

    max()方法返回OptionalInt对象:因为无法区分默认值为0还是真的最大值为0

    IntStream.rangeClose(1,100):1-100的100个数

    IntStream.range(1,100):1-100不包括100的99个数

    3.并行流

    流的顺序化和并行化:sequential()/parallel(),同时出现多种时以最后一次为准

    eg. Stream.iterate(1L,i -> i+1).limit(n).parallel().reduce(0L,Long:sum)

    4.lambda

    (1).使用:

    a.定义接口:Runnable接口中有run方法

    b.实现接口:使用lambda表达式实例化Runnable接口

    Runnable r = () -> Sytem.out.println("Helle world");

    c.传递接口并调用接口方法 :将r传递给需要的方法作为参数,实现中可调用r的run方法

    process(Runnable r){ r.run ;}  process(r);

    (2).常用的接口:(Comparator)

    Predicate<T>(test):T->boolean

    Consumer<T>(accept) T->void

    Function<T,R>(apply) T->R

    5.方法引用

    (1).调用类的静态方法:ClassName::staticMethod

    (args) - > ClassName.staticMethod(args)

    (2).引用对象的方法,对象本身是lambda的参数,ClassName:: instanceMethod 比如String:length

    (arg0,rest) - > arg.instanceMethod(rest)

    (3)调用已经存在的外部对象的方法:expr::instanceMethod 比如 

    () -> transaction.getValue() 写作 transaction::getValue

    (args) -> expr.instanceMethod(args)



    相关文章

      网友评论

          本文标题:java8实战

          本文链接:https://www.haomeiwen.com/subject/svxmwftx.html