Lambda表达式

概述

在实际编码中,我们可以采用lambda表达式来简化代码,使我们的代码变得简洁易读。通常会使用(参数)->{逻辑代码}的格式,我们会在一些函数式接口上使用lambda表达式,函数式接口一般只会存在一个抽象方法,所以调用普通方法时不需要特别声明,是否是函数式接口,可以查看方法的注解,标有@FunctionalInterface的就是函数式接口。

lanmbda语法:

语法格式一 : 无参无返回值
() -> System.out.println(“Hello Lambda!”);

语法格式二 : 单参,且无返回值
(x) -> System.out.println(x)

语法格式三 : 若只有一个参数,小括号可以省略不写
x -> System.out.println(x)

实例

Comparetor重写

package lambdademo;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;

public class comparatorLambdaTest05 {

    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>(Arrays.asList("Jay", "Join", "Mick", "Sophia","Juli","David","Michel","Micheal"));

        //比较器
        Comparator<String> comparator = (lang1,lang2)->{
            int ret = lang1.compareTo(lang2);

            if (ret == 0)
            {
                return lang1.length()-lang2.length();
            }
           return ret;
        };


        Comparator<String> comparator1 = comparator.reversed();
        //排序
        list.sort(comparator1);
        list.forEach((lang)->{
            System.out.println(lang);
        });
    }
}

在这里我们通过比较器实现了对字符数组的排序,选出数组中两个值进行对比,值相同的话按照长度排序。最后调用comparator'对象的逆序方法实现逆序输出。

Predicate

package lambdademo;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.function.Predicate;

public class lambdaTest02 {
//Predicate接口
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>(Arrays.asList("aaa", "ssssss", "bfdf", "bnggfhg", "bbbbbbb"));

        //查找以b开头的元素
        Predicate<String> predicate1 = (s) -> {
            if (s.startsWith("b"))
                return true;
            return false;

        };
        //查找字符长度小于5的元素
        Predicate<String> predicate2 = (s) -> {
            if (s.length() > 5)
                return true;
            return false;

        };
        //条件组合:and=与,or=或,negate=非
        Predicate<String> predicate3 = predicate1.and(predicate2);
        Predicate<String> predicate4 = predicate3.negate();
        list.forEach((s) -> {
            if (predicate4.test(s))
                System.out.println(s);
        });
    }
}

这次我们采用一个函数式Predicate接口进行演示,我们通过lambda表达式实现各种条件的查询,并且可以使用and,or,negate等关键词进行与或非的多条件筛选.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值