首页 / 知识
Java8新特性----Lambda表达式详细探讨
2023-04-11 16:20:00

Lambda表达式
Lambda是一个匿名函数,可以理解为一段可以传递的代码(将代码像数据一样传递);可以写出更简洁、更灵活的代码;作为一种更紧凑的代码风格,是Java语言表达能力得到提升
入门演示
案例1
public class TestMain
{
//使用匿名内部类完成比较
@Test
public void test()
{
//比较器 匿名内部类,创建该接口的一个实现类
Comparator<People> com=new Comparator<People>() {
@Override
public int compare(People o1, People o2) {
return o1.getAge()-o2.getAge();
}
};
//TreeSet的特点是可排序、不重复
TreeSet<People> ts=new TreeSet<>(com);
ts.add(new People("大忽悠",20));
ts.add(new People("小忽悠",18));
ts.add(new People("大大大",22));
ts.add(new People("小朋友",17));
ts.forEach(System.out::println);
}
//lambda表达式替代匿名内部类
@Test
public void test1()
{
//比较器
Comparator<People> com=(p1,p2)-> p1.getAge()-p2.getAge();
//TreeSet的特点是可排序、不重复
TreeSet<People> ts=new TreeSet<>(com);
ts.add(new People("大忽悠",20));
ts.add(new People("小忽悠",18));
ts.add(new People("大大大",22));
ts.add(new People("小朋友",17));
ts.forEach(System.out::println);
}
}
如何解决 cannot be cast to java.lang.Comparable问题?
如何解决 cannot be cast to java.lang.Comparable问题?
案例2
要求对下面的代码进行优化:
public class TestMain
{
List<People> peopleList= Arrays.asList(
new People("1号",18,3000),
new People("2号",21,4000),
new People("3号",19,5000),
new People("4号",20,3500)
);
//获取年龄大于18的
public List<People> getAgeOver18()
{
List<People> list=new ArrayList<>();
for (People p:peopleList)
{
if(p.getAge()>18)
list.add(p);
}
return list;
}
//获取工资大于3000的
public List<People> getMoneyOver3000()
{
List<People> list=new ArrayList<>();
for (People p:peopleList)
{
if(p.getMoney()>3000)
list.add(p);
}
return list;
}
@Test
public void test()
{
List<People> ageOver18 = getAgeOver18();
ageOver18.forEach(System.out::println);
System.out.println("======================================");
List<People> moneyOver3000=getMoneyOver3000();
moneyOver3000.forEach(System.out::println);
}
}
优化方式一 : 策略设计模式
声明一个接口MyPrediect
public interface MyPrediect<T>
{
public boolean test(T t);
}
接口的实现类一FilterPeoAge,负责过滤年龄:
public class FilterPeoAge implements MyPrediect<People>{
@Override
public boolean test(People people) {
return people.getAge()>18;
}
}
接口实现类二FilterPeoMoney,负责过滤金钱
public class FilterPeoMoney implements MyPrediect<People>{
@Override
public boolean test(People people) {
return people.getMoney()>3000;
}
}
测试演示:
public class TestMain
{
List<People> peopleList= Arrays.asList(
new People("1号",18,3000),
new People("2号",21,4000),
new People("3号",19,5000),
new People("4号",20,3500)
);
public List<People> FilterPeo(List<People> list,MyPrediect<People> mp)
{
List<People> peopleList=new ArrayList<>();
for (People p:list)
{
if(mp.test(p))
peopleList.add(p);
}
return peopleList;
}
@Test
public void test()
{
List<People> peopleList = FilterPeo(this.peopleList, new FilterPeoAge());
peopleList.forEach(System.out::println);
System.out.println("===========================");
List<People> peopleList1 = FilterPeo(peopleList, new FilterPeoMoney());
peopleList1.forEach(System.out::println);
}
}
|
最新内容
相关内容
Python中怎么新建文件夹
Python中怎么新建文件夹,代码,工作,培训,文件夹,路径,函数,操作系统,示例,文件名,以上,python中如何新建文件夹的方法:可以使用os包的mkdir函python中如何更新安装包
python中如何更新安装包,名称,对比,培训,工具,方式,版本,函数,以上,方法,表格,python中更新安装包的方法:pip是很好用的安装工具。piplist可以python有哪些高级特性?
python有哪些高级特性?,培训,特性,python怎么重新编译python
python怎么重新编译python,培训,环境变量,命令,里面,以上,文件,更多,内容,第一步,解压Python-3.6.4.tgz,tar-zxvfPython-3.6.4.tgz第二步,进入python怎么安装新模块
python怎么安装新模块,工具,时间,培训,官网,在线,模块,方式,本文,方法,版本,安装Python模块时大多还要依赖一些其他模块,可以利用自动化安装工python如何更新pip
python如何更新pip,培训,软件,最新,提示,版本,杀毒软件,插件,防护,上面,命令,当我们使用pip安装某个包时,在python进行pip安装插件时提示如下:Ypython新手常犯错误有哪些
python新手常犯错误有哪些,代码,有限,培训,标准,项目,波浪,情况,冒号,错误,同学,下面总结新手学习python经常遇到的坑,需要的同学可以参考错误python正则表达式使用
python正则表达式使用,位置,培训,一致,字符串,函数,模式,对象,模块,参数,表达式,正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字python新手如何系统学习
python新手如何系统学习,基础,系统,状态,环境,中级,培训,阶段,代码,概念,管理,我们可把学习python分为4个阶段,每个阶段需要完善的掌握知识点,ppython新手先学C语言还是Python?
python新手先学C语言还是Python?,培训,工具,数据,环境,语言,新手,上手,程序员,乐趣,潜质,非计算机专业的人,学习编程最重要的是保持住兴趣,而不python新式类和旧式类区别
python新式类和旧式类区别,代码,培训,统一,最新,地方,旧式,经典,实例,属性,区别,python的新式类是2.2版本引进来的,我们可以将之前的类叫做经python新手必看之文本文件的输入输
python新手必看之文本文件的输入输出,培训,标准,数据,文件,对象,输入输出,新手,模式,功能,内容,Python具有基本的文本文件读写功能。Python的