小白请教一下 JDK8 Lambda 表达式问题

2019-02-11 15:11:31 +08:00
 SuperHzw

现在项目升级用 jdk8,使用的时候遇到了一个问题,请教一下大家

实体类:
Family{
	private List<Person> person;
    ...
}
Person{
    private String age;
    ...
}

现在我要输出每个家庭中的每个人的年龄 jdk8 之前的写法:

if(!familyList.isEmpty()){
	for(Family f : familyList){
    	    if(!f.getPerson.isEmpty()){
        	for(Person p : f.getPerson){
            	    system.out.println(p.getAge());
            }
        }
    }
}

感觉很繁琐,可以用 Lambda 表达式来简化代码吗?

4141 次点击
所在节点    Java
28 条回复
no1xsyzy
2019-02-12 11:49:35 +08:00
@qiyuey 真 · 只是为了好看
流处理理解起来大多数更方便一点所以会觉得好看
SuperHzw
2019-02-12 11:59:27 +08:00
@qiyuey @no1xsyzy 不只是好看 刚刚写了个测试类试一下 单单两个循环 用 flatmap 速度是比较快的
qiyuey
2019-02-12 13:26:09 +08:00
@SuperHzw 你可以多测试几次,另外建议将 print 操作替换为空的方法调用,因为 print 带来的误差还是比较大的。其实这个问题很简单,你可以看一下 stream 的源码,就会发现,无论如何 stream 的性能不可能超过单纯的循环。
dengtongcai
2019-02-12 14:03:50 +08:00
写嵌套,然后 alt+enter 让 idea 帮你改成 lambda
cyspy
2019-02-12 16:07:14 +08:00
这两次判空完全是不需要的
SuperHzw
2019-02-12 23:46:10 +08:00
@cyspy 那应该如何处理呢?
SuperHzw
2019-02-12 23:46:36 +08:00
@qiyuey 好的 明天我会尝试一下
cyspy
2019-02-13 09:10:25 +08:00
@SuperHzw 无论是 for (:)还是 flatmap 都会自动忽略掉空集合

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/533940

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX