}
});
}
private static void log(int loglevel, LogMsgBuilder logMsgBuilder)
{
//只有level 为2 的时候才执行日志打印输出
if (loglevel == 2)
{
System.out.println(logMsgBuilder.buildMessage());
}
}
}
执行结果为:
打印第1个日志,日志级别为1不满足要求
打印第2个日志,日志级别为2满足要求
buildMessage: msgA2 + msgB2 + msgC2
HelloWorldJava
内部类机制是通过把执行的代码放到另一个对象中,当满足条件才执行对应对象的方法。当然内部类方法缺点是必须实现对应接口的方法且必须定义一个对象。
2.2 lambda表达式的延迟执行
在前面一节演示了通过内部类方式构造一个对象在满足条件时才执行对应的对象方法,但是如果条件不满足是不是建立的对象就没有用了。这里我们考虑通过lambda表达式来达到上述延迟执行的目的且不需要创建对象。
具体代码如下:
public class LambdaLazyExecute {
public static void main(String[] args)
{
final String msgA = “Hello”;
final String msgB = “World”;
final String msgC = “Java”;
//由于这里level参数为1,所以不会把msgA + msgB +msgC打印出来
log(1, ()->{
System.out.println(“logLevel为1的条件下执行”);
return msgA+msgB+msgC;}
);
final String msgA2 = “Hello2”;
final String msgB2 = “World2”;
final String msgC2 = “Java2”;
log(2, ()->{
System.out.println(“logLevel为2的条件下执行”);
return msgA2+msgB2+msgC2;});
}
private static void log(int loglevel, LogMsgBuilder msgBuilder)
{
//只有level 为2 的时候才执行日志打印输出
if (loglevel == 2)
{
System.out.println(msgBuilder.buildMessage());
}
}
}
执行结果为:
logLevel为2的条件下执行
Hello2World2Java2
通过结果我们得出,第一种情况logLevel=1,没有打印"logLevel为1的条件下执行"这个语句,证明了没有进行字符串拼接。
处理起来?
2.3 使用lambda作为参数和返回值
从前面例子可以看到,Java中的Lambda表达式可以被当作是匿名内部类的替代品。如果一个方法的参数是函数
式接口类型,那么就可以使用Lambda表达式进行替代。使用Lambda表达式作为方法参数,其实就是使用函数式
接口作为方法参数。
同样的,如果一个方法的返回值类型是一个函数式接口,那么就可以直接返回一个Lambda表达式。
比如,当需要通过一 个方法来获取一个 java.util.Comparator 接口类型的对象作为排序器时,我们就可以返回lambda表达式作为方法返回值。
具体实现代码如下:
public class ComparatorDemo {
private static Comparator newComparator()
{
return (a, b) -> b.length() - a.length();
}
public static void main(String[] args)
{
System.out.println(“-----------使用匿名类排序-------”);
testWithAnynimousClass();
System.out.println(“---------使用lambda排序---------”);
testWithLambda();
}
public static void testWithLambda()
{
String[] array = { “abc”, “ab”, “abcd” };
System.out.println(Arrays.toString(array));
Arrays.sort(array, newComparator());
System.out.println(Arrays.toString(array));
}
public static void testWithAnynimousClass()
{
String[] array = { “abc”, “ab”, “abcd” };
System.out.println(Arrays.toString(array));
Arrays.sort(array, new Comparator() {
@Override
public int compare(String o1, String o2) {
return o2.length() - o1.length();
}
});
System.out.println(Arrays.toString(array));
}
}
执行结果如下:
---------使用匿名类排序-------
[abc, ab, abcd]
[abcd, abc, ab]
---------使用lambda排序---------
[abc, ab, abcd]
[abcd, abc, ab]
总结
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2020-2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。
还有 高级架构技术进阶脑图、Android开发面试专题资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
id的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。