Java深入 - jdk8特性

1. 接口提供默认方法

Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可

public interface Test {
    
    int get();

    /* JAVA8 接口默认方法*/
    default int getVal(int a) {
        return a * 2;
    }

}

public class Test2 {

    public static void main(String[] args) {
        Test test = new Test() {

            @Override
            public int get() {
                return getVal(2); //调用接口默认方法
            }

        };

        System.out.println(test.get());
    }

}
2. Lambda 表达式

public class Test2 {

    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("c");
        list.add("A");
        list.add("b");
        list.add("d");

        /* forEach */
        list.forEach((String e) -> {
            System.out.println(e);
        });

        /* 排序 */
        Collections.sort(list, (String a, String b) -> {
            return b.compareTo(a);
        });

        list.forEach((String e) -> {
            System.out.println("=====" + e);
        });

        /* Map遍历方式 */
        Map<String, String> map = new HashMap<String, String>();
        map.put("a", "aaaaaaaaa");
        map.put("b", "bbbbbbbbb");
        map.put("c", "ccccccccc");
        map.put("d", "ddddddddd");

        /* Map遍历 */
        map.forEach((a, b) -> {
            System.out.println("key:" + a + "|val:" + b);
        });

    }

}

3. 函数式接口

    @FunctionalInterface
    interface Converter<F, T> {
        T convert(F from);
    }

    public static void main(String[] args) {

        Converter<String, Integer> converter = (from) -> Integer.valueOf(from);
        Integer converted = converter.convert("123");
        System.out.println(converted); // 123

    }

4. 访问默认的接口

1. Predicate 接口只有一个参数,返回boolean类型。该接口包含多种默认方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非)

    public static void main(String[] args) {

        /* Predicate 接口只有一个参数,返回boolean类型。该接口包含多种默认方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非) */
        Predicate<String> predicate = (s) -> (s.length() > 0 && s.length() < 10);

        System.out.println(predicate.test("test22222222222222222222")); // false
        System.out.println(predicate.negate().test("test2")); // false 结果反着来了

        Predicate<Boolean> nonNull = Objects::nonNull;
        Predicate<Boolean> isNull = Objects::isNull;

        Predicate<String> isEmpty = String::isEmpty;
        Predicate<String> isNotEmpty = isEmpty.negate();

    }
2. Function 接口有一个参数并且返回一个结果,并附带了一些可以和其他函数组合的默认方法

    public static void main(String[] args) {

        /* Function 接口有一个参数并且返回一个结果,并附带了一些可以和其他函数组合的默认方法 */
        
        /* 入参String => 返回Integer*/
        Function<String, Integer> toInteger = (s) -> {
            return NumberUtils.toInt(s, 0);
        };
        System.out.println(toInteger.apply("213213"));
        
        /* 入参Integer => 返回Integer*/
        Function<Integer, Integer> add = (s) -> {
            return s + 100;
        };
        System.out.println(add.apply(200));

    }
3. Supplier 接口返回一个任意范型的值,和Function接口不同的是该接口没有任何参数

    public static void main(String[] args) {

        /* Supplier 接口返回一个任意范型的值,和Function接口不同的是该接口没有任何参数 */
        Supplier<Person> personSupplier = Person::new;
        Person person = personSupplier.get();
        person.setAge(100);

        System.out.println(person.getAge());

    }
4. Consumer 接口表示执行在单个参数上的操作。

Consumer<Person> greeter = (p) -> System.out.println("Hello, " + p.firstName);
greeter.accept(new Person("Luke", "Skywalker"));
5. Optional 接口防止空指针操作
    public static void main(String[] args) {

        List<String> list = new ArrayList<String>();
        list.add("c");
        list.add("A");
        list.add("b");
        list.add("d");
        

        /* Optional 主要用于防止传入的参数为null */
        Optional<String> optional = Optional.of("aa"); //  null 则会直接报错
        System.out.println(optional.get());
        
        Optional<List<String>> optional2 = Optional.of(list);
        System.out.println(optional2.get());
        System.out.println(optional2.isPresent()); //非空值 true

    }


6.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值