java8 Lambda表达式学习

Lambda表达式

- 函数式编程

Lambda 表达式,也可称为闭包,允许把函数作为一个参数,使代码更简洁。

- Lambda格式

参数列表 -> 表达式
参数列表 -> {表达式集合}

  1. s -> s.length(),s为String类型:返回给定字符串的长度,如果s = “String”,则最终结果为6
  2. ()->5:始终返回5的无参方法
  3. (int x, int y)-> {int z = x * y; return z + x;}
    //用花括号括起来的表达式集合,要显示添加return。

- 函数式接口

仅含有一个抽象方法的接口
jdk自带的函数式接口
jdk 为 lambda 表达式已经内置了丰富的函数式接口

  • Predicate
    利用我们在外部设定的条件对于传入的参数进行校验并返回验证通过与否。
    在这里插入图片描述
public class ConsumerDemo {
    public <T> void forEach(List<T> list, Consumer<T> consumer) {
        for (T value: list) {
            consumer.accept(value);
        }
    }
}
public static void main(String[] args) {
    ConsumerDemo consumerDemo = new ConsumerDemo();
    List<String> listStr = new ArrayList<>();
    listStr.addAll(Arrays.asList("I", " ", "Learn",  " ", "Java8",  " ", "Hard"));
    consumerDemo.forEach(listStr, (value) -> System.out.println(value.toLowerCase()));
    //listStr = consumerDemo.forEach1(listStr, (value) -> value.toLowerCase());
    System.out.println(listStr);
}
// 输出
//i
 
//learn
 
//java8
 
//hard
//listStr: [I,  , Learn,  , Java8,  , Hard]

上面的例子遍历字符串集合并以小写形式打印输出

  • Consumer
    Consumer 提供了一个 accept 抽象函数,该函数接收参数并依据传递的行为应用在传递的参数值。但是不会改变原来参数。
    在这里插入图片描述
public class ConsumerDemo {
    public <T> void forEach(List<T> list, Consumer<T> consumer) {
        for (T value: list) {
            consumer.accept(value);
        }
    }
}
public static void main(String[] args) {
    ConsumerDemo consumerDemo = new ConsumerDemo();
    List<String> listStr = new ArrayList<>();
    listStr.addAll(Arrays.asList("I", " ", "Learn",  " ", "Java8",  " ", "Hard"));
    consumerDemo.forEach(listStr, (value) -> System.out.println(value.toLowerCase()));
    //listStr = consumerDemo.forEach1(listStr, (value) -> value.toLowerCase());
    System.out.println(listStr);
}
// 输出
//i
 
//learn
 
//java8
 
//hard
//listStr: [I,  , Learn,  , Java8,  , Hard]
  • Function<T, R>
    Funcation 执行转换操作,输入类型 T 的数据,返回 R 类型的结果
    在这里插入图片描述
public class FuncationDemo {
    public List<Integer> pares(List<String> list, Function<String, Integer> function) {
        List<Integer> list1 = new ArrayList<>();
        for (String s: list) {
            list1.add(function.apply(s));
        }
        return list1;
    }
}
public static void main(String[] args) {
    FuncationDemo funcationDemo = new FuncationDemo();
    List<String> list1 = new ArrayList<>();
    list1.addAll(Arrays.asList("1","2","3","4","5","6","7","8","9"));
    List<Integer> result = funcationDemo.pares(list1, value -> Integer.valueOf(value));
    System.out.println(result);
}
// 输出
//[1, 2, 3, 4, 5, 6, 7, 8, 9]

- 缺点

  1. 可读性太差,代码越长越差(事物都有两面性,既是优点也是缺点);
  2. 难调试,没办法将代码运行中出现的问题输出到日志等; 有条件限制,需要升级到jdk1.8才能使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值