【Java:jdk1.8特性】学习记录

(公司有新的项目终于开始用jdk1.8了,回忆一下实习期间的学习记录,今天又在蚂蚁课堂上看了下)

1.FunctionalInterface函数式接口

有且只有一个抽象方法即为函数式接口,但是可以加Object类的equals方法

/**
 * @author wk
 * @Description:JDK1.8,接口定义 default、static关键字修饰方法可以有方法体
 *   
 * @date 2019/8/9 13:56
 **/
@FunctionalInterface
public interface UserService {

    void addUser(String name, int age);
     
    /**
     * default可以被子类重写
     *
     * @param user
     */
    default String getUser(User user) {
        return user.getUserName();
    }

    /**
     * 静态方法不能被子类继承
     *
     * @param user
     */
    static void staticUser(User user) {
        System.out.println("static 方法 " + user.getUserName());
    }
    
    /**
     * 允许Object的equals方法
     *
     * @param obj
     * @return
     */
    boolean equals(Object obj);
}

 静态方法直接使用类名调用就可以,UserService.staticUser(user);

2.lambda表达式

@FunctionalInterface
public interface FunctionMemberInterface {

    void addUser(List<User> list, User user);

    default String getUser(User user) {
        return user.getUserName();
    }

    /**
     * 静态方法不能被子类继承
     *
     * @param user
     */
    static void staticUser(User user) {
        System.out.println("static 方法 " + user.getUserName());
    }

    /**
     * 允许Object的equals方法
     *
     * @param obj
     * @return
     */
    boolean equals(Object obj);
}

 

@FunctionalInterface
public interface FunctionUserInterface {

    String getUserName(User user);
}
public class FunctionInterfaceTest {

    public static void main(String[] args) {

        List<User> list = new ArrayList<>();
        //1.8之前 匿名内部类的方式 ,代码冗余
        FunctionMemberInterface functionMemberInterface = new FunctionMemberInterface() {
            @Override
            public void addUser(List<User> list, User user) {
                list.add(user);
                System.out.println(list.get(0).getUserName());
            }
        };
        functionMemberInterface.addUser(list, new User("李白", 18));
        //一般先写(形参),->,主体代码{} ,接口 T t = 
        FunctionMemberInterface memberInterface = (userList, user) -> {
            userList.add(user);
            System.out.println("userName: " + userList.get(0).getUserName());
            System.out.println("userAge:" + userList.get(0).getUserAge());
        };
        memberInterface.addUser(list, new User("杜甫", 11));

        FunctionUserInterface functionUserInterface = (user) -> {
            System.out.println("只有返回语句,可以不加大括号");
            return user.getUserName();
        };
        FunctionUserInterface functionUserInterface2 = (user) -> user.getUserName();
        System.out.println(functionUserInterface.getUserName(new User("张飞", 44)));
        System.out.println(functionUserInterface2.getUserName(new User("张飞", 44)));
    }
}

3.方法的引用

(大概只是用一下工具类的方法引用吧)

public class MethodReferenceTest {

    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("李白");
        arrayList.add("杜甫");
        arrayList.add("姜维");
        arrayList.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
        arrayList.forEach((t) -> {
            System.out.println(t);
        });

        //方法的引用,在lambda基础上简化代码
        arrayList.forEach(System.out::println);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值