【爱上Java8】一步一步走进 java8 lambda表达式

本文通过实例展示了Java8中Lambda表达式的使用,如何简化代码并提高可读性,具体包括集合遍历、函数式接口及匿名类的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java的lambda表达式可以大大简化Java的代码,Java令人诟病的一个地方就是,代码太繁琐,同样的功能使用pythong语言实现,可能只需要1/10的代码就可以完成,但是使用Java写,却会有一段的“废话”,令人很不爽,因此,java8引入了lambda表达式,致力于解决这个问题。
下面用一个简单的例子说明,比如我们要遍历一个集合,最麻烦的写法是:

1
2
3
4
5
final List<String> friends =
        Arrays.asList("Brian""Nate""Neal""Raju""Sara""Scott");
for(int i = 0; i < friends.size(); i++) {
    System.out.println(friends.get(i));
}

稍微改进一下,就变成

1
2
3
4
5
final List<String> friends =
        Arrays.asList("Brian""Nate""Neal""Raju""Sara""Scott");
for(String name : friends) {
    System.out.println(name);
}

在Java8中,提供了一个forEach接口,来实现类似的遍历功能:

1
2
3
4
5
6
7
final List<String> friends =
        Arrays.asList("Brian""Nate""Neal""Raju""Sara""Scott");
friends.forEach(new Consumer<String>() {
    public void accept(final String name) {
    System.out.println(name);
    }
});

初一看,更加麻烦了,但这个只是原始版本。这个forEach就是有点点函数式编程的味道,它接收一个接口,用来处理集合里的数据。这个接口的部分定义如下:

1
2
3
4
@FunctionalInterface
public interface Consumer<T> {
    void accept(T t);
}

关注一下那个FunctionalInterface,表示这个是一个函数式的接口,这种接口,就可以用来函数式编程,做成一些lambda表达式之类的。
基于这个函数式的接口,我们可以简化上面的写法:

1
2
3
final List<String> friends =
    Arrays.asList("Brian""Nate""Neal""Raju""Sara""Scott");
friends.forEach((final String name) -> System.out.println(name));

这样看起来是不是方便很多了?->的左边表示参数类型和参数名字,右边是接口的实现,java会帮你生成那个函数式接口的一个匿名类。
这还没完,可以接续简化:

1
2
3
final List<String> friends =
        Arrays.asList("Brian""Nate""Neal""Raju""Sara""Scott");
friends.forEach((name) -> System.out.println(name));

因为java都已经知道了是什么接口,参数类型当然知道啦,所以没必要写出来,所以可以省略了,这样是不是更简单呢?
这还没完呢,既然是函数式接口,Java知道了接口的定义,参数,以及参数类型都知道了,为什么还要累赘的写出来呢,大家不是觉得java很繁琐吗?那么现在,将简洁进行到底吧!

1
2
3
final List<String> friends =
        Arrays.asList("Brian""Nate""Neal""Raju""Sara""Scott");
friends.forEach(System.out::println);

好了,这些连参数也省了。一句话就遍历了一个集合,就指名了一个方法的引用。
可以看到java还是努力再改变自己,但是从我个人的感觉出发,我觉得写到这样就差不多了

1
friends.forEach((name) -> System.out.println(name));

省略太多,其实对可读性来说并不是太好。毕竟代码是写给人看的。
今天就说到这里,以后有时间,会继续分享一些java8的新特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值