栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java8终于懂了

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java8终于懂了

java8有哪些新特性:
    lamdad表达式函数式接口方法引用构造器引用StreamAPI接口中的默认方法与静态方法新时间日期API其它特性
感受java8的优点:

提示:为什么学习lamdad表达式?能帮我们解决什么问题?值不值得学习?

public void test() {

        //之前的内部类
        Comparator com = new Comparator() {
            @Override
            public int compare(String o1, String o2) {

                return Integer.compare(o1.length(), o2.length());
            }
        };

        System.out.println("如果是lamdad表达式的写法----------------------------------------------");

        Comparator com2= (o1,o2)-> Integer.compare(o1.length(), o2.length());
    }

提示:找出符合条件的用户(年龄大于30. 薪资大于5000的, id 大于3)

 List users = Arrays.asList(
            new User(1,"张三",15,2000.00),
            new User(2,"李四",20,3000.00),
            new User(3,"王五",30,5900.00),
            new User(4,"赵六",35,6600.00),
            new User(5,"田七",45,7700.00));

    //获取年龄小于35的用户?
    public List filteByAge(List users) {
        List temp = new ArrayList<>();
        for(User user : users){
            if(user.getAge()>35) {
                temp.add(user);
            }
        }
        return temp;
    }
    //获取工资大于5000的用户?
    public List filteBySalary(List users) {
        List temp = new ArrayList<>();
        for(User user : users){
            if(user.getSalary()>35) {
                temp.add(user);
            }
        }
        return temp;
    }
    //获取id大于2的数据
    //...
    //优化方式1,策略设计模式
    public List filterByPredicate(List users, MyPredicate predicate) {
        List temp = new ArrayList<>();
        for(User user : users){
            if(predicate.judge(user)) {
                temp.add(user);
            }
        }
        return temp;
    }

    public void test1() {
        List users = filterByPredicate(this.users, new MyPredicateByAge());
    }


    //优化方式2,匿名内部类
    public void test2() {
        List users = filterByPredicate(this.users, new MyPredicate() {
            @Override
            public boolean judge(User user) {
                return user.getAge()>35;
            }
        });
    }

    //优化方式3 lamdad表达式
    public void test3() {
        List users = filterByPredicate(this.users, user->user.getAge()>35);
    }

    //优化方式4
    public void test4() {
        List users = users.stream().filter(user->user.getAge()>35).collect(Collectors.toList());
    }
    通过写不同的方法通过策略模式写不同的类通过策略模式写匿名内部类通过策略模式lamdad表达式通过Stream API (现成的方法)
    提示:通过java8的新特性lamdad表达式和streamapi变得很简单

lamdad表达式:

提示:lamdad表达式无非就是简化代码

Comparator com2= (o1,o2)-> Integer.compare(o1.length(), o2.length());

定义: lamdad表达式:左侧 ->右侧

左侧定义参数列表右侧具体实现lamdad表达式需要函数式接口支持


函数式接口:

提示:接口中只有一个抽象方法的接口,称为函数式接口,可以使用@FunctionalInterface注解,来说明该接口是函数式接口,当然java8的接口做了升级,可以允许有静态方法和默认方法,来增强接口

例如:

@FunctionalInterface
public interface MathOperation {
    float operator(int a, int b);
}

四种内置函数式接口

@FunctionalInterface
public interface Consumer {

    
    void accept(T t);


@FunctionalInterface
public interface Supplier {

    
    T get();
}

@FunctionalInterface
public interface Function {

    
    R apply(T t);

@FunctionalInterface
public interface Predicate {

    
    boolean test(T t);
方法引用:

提示:其实质就是对lamdad表达式的简化,方法体只是一个方法的调用
使用前提:若lamdad体实现的功能,已经有方法提供了实现,可以使用方法引用

    对象的引用::实例方法名
PrintStream ps =  System.out;
Consumer con = x-> ps.println(x);
Consumer co2 = x-> ps::println;
    类名::静态方法名
Comparator com1= (o1,o2)-> Integer.compare(o1,o2);

Comparator com2= Integer::compare;
    类名::实例方法名
BiPredicate bp = (x,y)->x.equals(y);
BiPredicate b2 = String::equals;

提示:方法引用注意:1:方法引用的方法参数列表与返回类型必须与函数式接口中抽象方法的参数列表与返回类型必须一致。2返回类型相同的情况下,函数接口中的抽象方法的参数列表的第一个参数是方法引用方法的调用者,第二个参数(或无参),是方法引用方法的参数时,可以使用类名:实例方法名

构造器引用:

提示:跟引用类似 类名::new

Supplier user = ()-> new User();
Supplier use2 = User::new;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/763037.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号