java8 lambda使用汇总

从java8出现以来lambda是最重要的特性之一,它可以让我们用简洁流畅的代码完成一个功能。 很长一段时间java被吐槽是冗余和缺乏函数式编程能力的语言,随着函数式编程的流行java8种也引入了 这种编程风格。在此之前我们都在写匿名内部类干这些事,但有时候这不是好的做法,本文中将介绍和使用lambda, 带你体验函数式编程的魔力。
lambda表达式语法结构:
在lambda表达式中,通过如下形式来实现lambda的使用

expression = (variable) -> action
  1. variable 代表变量
  2. action则是实现代码的逻辑部分
    包含多个参数时:
int sum = (x, y) -> x + y;

sum 用来接收计算的结果,lambda省略了return。

lambda表达式使用方式

1、 foreach
在java8之前,循环列表的方式主要有两种,一种是普通的for循环。

List<String> item = new ArrayList<String>();
item.add("A");
item.add("B");
item.add("C");
item.add("D");
for(int i=0;i<item.size();i++){
	//代码段
}

一种是foreach方法。

for(String id:item){
	//代码段
}

其中ids 为一个List类型实例。
使用lambda表达式

item.foreach(a->{
//代码段
});

2、利用lambda获取一个list的值并赋值给另一个list
在Java8之前,需要循环List,在循环中赋值拷贝。java8 Stream提供了collect方法,可以很好的处理赋值问题。

List<String> list1 = Lists.newArrayList();
        List<String> list2 = Lists.newArrayList();
        list1.add("1");
        list1.add("2");
        list1.add("3");
 
        list2 = list1.stream().map(string -> {
            return "stream().map()处理之后:" + string;
        }).collect(Collectors.toList());
        
        list2.stream().forEach(string -> {
            System.out.println(string);
        });

3、利用stream().filter() 对list进行过滤。

List<String> list1 = Lists.newArrayList();
        List<String> list2 = Lists.newArrayList();
        list1.add("1");
        list1.add("1");
        list1.add("2");
        list1.add("3");
 
        list2 = list1.stream().filter(s -> s != "1").collect(Collectors.toList());
        System.out.println(list2.toString());

4、利用stream对List做内存分页。

List<String> list1 = Lists.newArrayList();
        List<String> list2 = Lists.newArrayList();
        list1.add("1");
        list1.add("1");
        list1.add("2");
        list1.add("3");
 
        list2 = list1.stream().filter(s -> s != "1").skip(pageNo * pageSize).limit(pageSize).collect(Collectors.toList());
        System.out.println(list2.toString());

注意这里的pageNo必须从0开始,否则第一页的数据查询不到。

5、通过stream.distict()对List数据进行去重处理

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 5, 5, 5, 6, 7);
 
List<Integer> distinctNumbers = numbers.stream()
.distinct()
.collect(Collectors.toList());
System.out.println(distinctNumbers);//1, 2, 3, 4, 5, 6, 7

但是distinct只能提供对基本类型的去重,如果是个User类型则需要写一个过滤器实现,distinct不直接提供设置过滤条件。

以上就是基本的lambda表达式的使用方式了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值