9.jdk8新特性

1.接口中default方法

package com.jdk8new.defau;

public interface Car1 {
    default void print(){
        System.out.println("我是BMW");
    }
}

package com.jdk8new.defau;

public interface Car2 {
    default void print(){
        System.out.println("我是紅旗");
    }
}
package com.jdk8new.defau;

public class CarImpl implements Car1,Car2 {

    @Override
    public void print() {
       Car1.super.print();
    }
}

2.jdk中的函數(shù)式接口

package com.jdk8new.function;

import java.util.function.*;

public class FunctionTest {
    public static void main(String[] args) {
        //接收兩個(gè)參數(shù),沒(méi)有返回值
        testBiConsumer();
        System.out.println("---end BiConsumer------");
        //接收兩個(gè)參數(shù),返回一個(gè)參數(shù)
        testBiFunction();
        //BiFunction的一種特殊情況,兩個(gè)相同的入?yún)ⅲ粋€(gè)出參與入?yún)㈩?lèi)型一致
        testBinaryOperation();
        //返回boolean值,接收兩個(gè)參數(shù)(例如比較兩個(gè)值的大小)
        testBiPredicate();
        //沒(méi)有入?yún)ⅲ祷豣oolean值(例如比較兩個(gè)字符串大小)
        testBooleanSupplier("1","1");
        //接收一個(gè)參數(shù),沒(méi)有返回值,適合對(duì)對(duì)象進(jìn)行加工
        testConsumer();
    }

    private static void testConsumer() {
     Consumer<User> reSetFun = u -> u.setId(u.getName());
     User u = new User();
     u.setId("1");
     u.setName("dadfa");
     reSetFun.accept(u);
        System.out.println(u.getId());
    }

    private static void testBooleanSupplier(String a,String b) {
        BooleanSupplier su = ()-> a.equals(b);
    }

    private static void testBiPredicate() {
        //定義一個(gè)比較大小的函數(shù),a如果比b大返回true否則返回false
        BiPredicate<Integer,Integer> compareFun=(a,b)-> a>b;
        System.out.println(compareFun.test(1,2));
    }

    private static void testBinaryOperation() {
        BinaryOperator<User> us1=(u1,u2)-> u1;
        us1.apply(new User(),new User());

    }

    private static void testBiFunction() {
        //此函數(shù)輸入兩個(gè)object入?yún)?,返回一個(gè)object出參
        //自定義實(shí)現(xiàn)邏輯兩數(shù)相加
        BiFunction<Integer,Integer,Integer> addMath=(a,b)-> a+b;
        //此函數(shù)接收一個(gè)Object入?yún)?,返回一個(gè)Object出參
        //自定義實(shí)現(xiàn)了對(duì)入?yún)⒃黾?倍,并返回
        Function<Integer,Integer> then = a->a*2;
        //此方法的執(zhí)行邏輯是,先執(zhí)行1+2 =3,再對(duì)3執(zhí)行乘以2=6
        int x=addMath.andThen(then).apply(1,2);
        System.out.println(x);
    }

    private static void testBiConsumer() {
        //接收兩個(gè)Object參數(shù),沒(méi)有返回值
        BiConsumer<Integer,Integer> bb= (a, b)-> System.out.println(a+b);
        //andThen的意思再一次調(diào)用
        bb.andThen(bb).andThen(bb).accept(1,2);
    }
}
package com.jdk8new.function;

public class User {
    private String name;
    private String id;
    public User(){
        super();
    }
    public User(String id, String name){
        this.id=id;
        this.name=name;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "{id:"+id+"--name:"+name+"}";
    }
}

3.jdk8中l(wèi)ambda表達(dá)式

package com.jdk8new.lamda;
@FunctionalInterface
public interface IFuncInterface {
    public int add(int a ,int b);
}

package com.jdk8new.lamda;

public class LambdaTest {
    public static void main(String[] args) {
        IFuncInterface addMath = (a,b)->a+b;
        IFuncInterface subMath =(a,b)-> a-b;
        System.out.println(addMath.add(1,2));
    }
}

4.jdk8中方法引用

package com.jdk8new.methodref;
public interface Supp<T> {
    T get();
}
package com.jdk8new.methodref;

public class Car {
    public static Car create(Supp<Car> supp){
        return supp.get();
    }
    public static void collide(final Car car){
        System.out.println("colide:"+car.toString());
    }
    public void repar(){
        System.out.println("repar:"+this.toString());
    }
    public void  other(Car otherCar){
        System.out.println("other:"+otherCar.toString());
    }
}
package com.jdk8new.methodref;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MainTest {
    public static void main(String[] args) {
        //等價(jià)與下面的語(yǔ)法
        Car car1=Car.create(new Supp<Car>() {
            @Override
            public Car get() {
                return new Car();
            }
        });
        //等價(jià)于
        Car car2=Car.create(()->new Car());
        //等價(jià)于
        Car car3 = Car.create(Car::new);

        List<Car> cars = Arrays.asList(car1,car2,car3);
        //靜態(tài)方法調(diào)用
        cars.forEach(Car::collide);
        //特定類(lèi)的任意對(duì)象的方法
        cars.forEach(Car::repar);
        //特定對(duì)象的方法引用
        Car car4=Car.create(Car::new);
        cars.forEach(car4::other);

        List<String> list= new ArrayList<>();
        list.add("sdfsf1");
        list.add("sdfsf2");
        list.add("sdfsf3");
        list.add("sdfsf4");
        list.add("sdfsf5");
        list.forEach(System.out::println);
    }
}

5.jdk8中stream流

package com.jdk8new.methodref;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MainTest {
    public static void main(String[] args) {
        //等價(jià)與下面的語(yǔ)法
        Car car1=Car.create(new Supp<Car>() {
            @Override
            public Car get() {
                return new Car();
            }
        });
        //等價(jià)于
        Car car2=Car.create(()->new Car());
        //等價(jià)于
        Car car3 = Car.create(Car::new);

        List<Car> cars = Arrays.asList(car1,car2,car3);
        //靜態(tài)方法調(diào)用
        cars.forEach(Car::collide);
        //特定類(lèi)的任意對(duì)象的方法
        cars.forEach(Car::repar);
        //特定對(duì)象的方法引用
        Car car4=Car.create(Car::new);
        cars.forEach(car4::other);

        List<String> list= new ArrayList<>();
        list.add("sdfsf1");
        list.add("sdfsf2");
        list.add("sdfsf3");
        list.add("sdfsf4");
        list.add("sdfsf5");
        list.forEach(System.out::println);

    }
}

6.jdk8中optional類(lèi)

package com.jdk8new.optional;

import java.util.Optional;

public class TestOptional {
    public static void main(String[] args) {
        testEmpty();
    }
    private static void testEmpty() {
        //創(chuàng)建一個(gè)空的Optional對(duì)象
        Optional<Object> empty = Optional.empty();
        //創(chuàng)建一個(gè)值為Integer=10的Optional對(duì)象
        Optional<Integer> pi = Optional.of(10);
        Optional<Integer> p2 = Optional.of(10);
        //判斷optional對(duì)象中是否存在值
        System.out.println(empty.isPresent());
        //Optional對(duì)象中如果有值,調(diào)用ifPresent方法定義的函數(shù)式接口自定義邏輯
        pi.ifPresent(System.out::println);
        //創(chuàng)建一個(gè)值可以為null的Optional對(duì)象
        Optional<Integer> inter = Optional.ofNullable(11);
        inter.ifPresent(System.out::println);
        //獲取Optional對(duì)象中的值,如果不存在,返回參數(shù)other
        Integer integer = pi.orElse(12);
        System.out.println(integer);
        Object o = empty.orElse(13);
        System.out.println(o);
        //獲取Optional對(duì)象中的值,如果不存在,返回接口自定義邏輯中的值
        Object o1 = empty.orElseGet(() -> 10);
        System.out.println(o1);
        System.out.println(pi.equals(p2));
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 為什么使用 Lambda 表達(dá)式 Lambda 是一個(gè)匿名函數(shù),我們可以把 Lambda 表達(dá)式理解為是一段可以傳...
    強(qiáng)某某閱讀 15,024評(píng)論 0 15
  • 簡(jiǎn)介 1.速度更快2.代碼更少(Lambda表達(dá)式)3.強(qiáng)大的Stream API4.便于并行5.最大化減少空指針...
    是小豬童鞋啦閱讀 489評(píng)論 0 0
  • JDK8 十大新特性 一、接口的默認(rèn)方法 Java 8允許我們給接口添加一個(gè)非抽象的方法實(shí)現(xiàn),只需要使用 defa...
    YClimb閱讀 386評(píng)論 0 0
  • 對(duì)于很多剛接觸java語(yǔ)言的初學(xué)者來(lái)說(shuō),要了解一門(mén)語(yǔ)言,最好的方式就是要能從基礎(chǔ)的版本進(jìn)行了解,升級(jí)的過(guò)程,以及升...
    timothyue1閱讀 396評(píng)論 0 1
  • 微信搜「煙雨星空」,白嫖更多好文。 現(xiàn)在 Oracle 官方每隔半年就會(huì)出一個(gè) JDK 新版本。按時(shí)間來(lái)算的話(huà),這...
    煙雨星空閱讀 1,425評(píng)論 2 4

友情鏈接更多精彩內(nèi)容