JDK8新特性

只为自己记忆方便

一、接口新增内容

1.接口中默认方法
 2.接口中静态方法

eg:

public interface UserService {
    void save(User user);

    User find(int id);

    default int getNumber() {
        return 1;
    }
    
    public static void show(){
        System.out.println("new static method");
    }
}

二、Lambda表达式

     1.完整的Lambda表达式由三部分组成:参数列表、箭头、声明语句;

      2.当lambda表达式的参数个数只有一个,可以省略小括号

      3.当lambda表达式只包含一条语句时,可以省略大括号、return和语句结尾的分号

三、函数接口是只有一个抽象方法的接口, 用作 Lambda 表达式的返回类型。

eg:

public interface UserService {
    void save(User user);
}
public class UserController {
    public void save(UserService userService,User user){
        userService.save(user);
    }
}
User user=new User(1,"name");
UserController userController=new UserController();

//lambda表达方式,类似匿名内部类
userController.save((u) ->{
    System.out.println(u);
},user);

四、常用接口(可用lambda方便表达)

1.Supplier<User> supplier  仅包含无惨方法(T get();),用来获取指定类型对象
public static User getUser(Supplier<User> supplier){
    return supplier.get();
}

@Test
public void testGetUser( ){

    User user=getUser(()->{
       return new User(1,"name");
    });     getUser(()->{
    return new User();
  });

     // 上面代码的另外一种写法 ,方法引用 ,通过双冒号的方式

       getUser(User::new);

    System.out.println(user);
}

2.Consumer 消费一个对象

/**
 * Performs this operation on the given argument.
 *对给定的参数T执行定义的操作
 * @param t the input argument
 */
void accept(T t);
//对给定的参数T执行定义的操作执行再继续执行after定义的操作
default Consumer<T> andThen(Consumer<? super T> after) {
    Objects.requireNonNull(after);
    return (T t) -> { accept(t); after.accept(t); };
}

eg.

public class ConsumerTest {

    @Test
    public void consumerTest(){
        User u=new User(1,"zhangsan");
        consumerUser(user -> {
            System.out.print(user);
        },u);
        System.out.println("-------------------------------");
        consumerUser(user ->{
            user.setId(12);
            System.out.println(user);
        },user->{
            user.setName("lisi");
            System.out.println(user);
        },u );
    }

    public void consumerUser(Consumer<User> consumer,User user){
        consumer.accept(user);
    }

    public void consumerUser(Consumer<User>consumer,Consumer<User> userConsumer,User user){
        consumer.andThen(userConsumer).accept(user);
    }
}

执行结果如下,连续改变对象的值

3.Predicate 判断函数

核心方法,通过方法能够判断出对应的使用方式。

boolean test(T t); 判断
default Predicate<T> and(Predicate<? super T> other) { Objects.requireNonNull(other); return (t) -> test(t) && other.test(t); }

default Predicate<T> negate() { return (t) -> !test(t); }

default Predicate<T> or(Predicate<? super T> other) { Objects.requireNonNull(other); return (t) -> test(t) || other.test(t); }

static <T> Predicate<T> isEqual(Object targetRef) { return (null == targetRef) ? Objects::isNull : object -> targetRef.equals(object); }

4.Function<T,R>  T为对象的应用操作,R为返回值对象 核心方法R apply(T t)

@Test
public void functionTest(){

   int result= functionUser(s -> {
        return Integer.parseInt(s);
    },"1234");//静态方法方法引用   类名::方法名 
int result2=functionUser(Integer::parseInt,"1235");

   System.out.println(result);
}

public int functionUser(Function<String,Integer> function,String str){
   int result= function.apply(str);
   return result;

}

图片地址来源:https://blog.csdn.net/weixin_34266504/article/details/92736948

6764914784a0c682a4e2cf8b99d7c4aaa38.jpg

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值