概述
在实际编码中,我们可以采用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等关键词进行与或非的多条件筛选.