Java8 已经沦为很多公司的JDK版本了,所以学习Java8的新特性也是重中之重
Java8—Lambda表达式应用:
1.预热
lambda 使用 方式:
1. 无参使用 ()-> System.out.println("sss")
2. 单个参数可以忽略小括号 a-> System.out.println(a.getId())
3. 多参数多行数
(a,b)->{
..... 有返回值的话:return 返回值。
}
2.四大函数式接口:
1. Consumer<T> 消费接口 void accept(T t)
2. Supplier<T> 供给型接口 T get()
3. Predicate<T> 断言型接口 boolean test(T t)
4. Function<T,R> 函数型接口 R apply(T t)
3.函数式接口的使用方式:
/** * * @param <T> * @param <R> */
public abstract class ExerciseLambda<T,R> {
/** * 消费 * @param consumer */
public void acceptVoid(T user,Consumer<T> consumer){
consumer.accept(user);
}
/** * 供给型接口 * @param supplier * @return */
public T returnEntity(Supplier<T> supplier){
return supplier.get();
}
/** * 函数式接口 * @param entity * @param function * @return */
public R toolFunction(T entity,Function<T,R> function){
return function.apply(entity);
}
/** * 判断 * @param t * @param predicate * @return */
public boolean confirm(T t, Predicate<T> predicate){
return predicate.test(t);
}
}
public class UserLambdaService extends ExerciseLambda<User,UserVo> {
}
public class LambdaFactory{
UserLambdaService lambdaService = new UserLambdaService();
/** * 供给型接口 在参数上写方法。 * @return */
private User testSupplier(){
return lambdaService.returnEntity(() -> {
User tempUser = new User();
tempUser.setId("110");
return tempUser;
});
}
/** * 消费测试 */
@Test
public void testAccept(){
User user = testSupplier();
lambdaService.acceptVoid(user,user1 -> System.out.println(user.getId()));
}
/** * */
public UserVo testFunction(){
User user = testSupplier();
return lambdaService.toolFunction(user,eo->{
UserVo userVO = new UserVo();
userVO.setId(eo.getId());
return userVO;
});
}
/** * 判断是否成立 */
@Test
public void test(){
User user = testSupplier();
UserVo userVo = testFunction();
if(lambdaService.confirm(user,userTemp -> userTemp.getId().equals(userVo.getId()))){
System.out.println("成功了");
}
}
小结:
好处就是可以进行不定行数的插入实现的方法,来促使得到最终结果,使方法更加灵活,而不需要改已经定义好的方法,此处没有太多实例说明,但是参数传方法,已经说明了一切,也是一种解耦方式。