带你读《2022技术人的百宝黑皮书》——stream的实用方法和注意事项(4)

简介: 带你读《2022技术人的百宝黑皮书》——stream的实用方法和注意事项(4)

带你读《2022技术人的百宝黑皮书》——stream的实用方法和注意事项(3)https://developer.aliyun.com/article/1339660?groupCode=taobaotech

打印观察执行次数如下

 

 

 

image.png

 

 

anyMatch 会无条件遍历所有元素再返回,而直观的遍历写法往往不会犯这种错误,拿到结果后可以提前break。大家可能会想到先利用filter过滤获获取“昨天”的日历,然后再anymatch

boolean yesterdaySigned = calendars.stream()
.filter(t -> Days.daysBetween(t.getDate(), now).getDays() == 1)
.anyMatch(Calendar::isSigned);

 

 

 

但是很可惜,filter同样会完整遍历整个集合。事实上遍观所有stream方法似乎都没有办法很好的解决这个问题。也欢迎大家一起探讨。

 

image.png可阅读性

摘取了某业务中判断周期内签到次数的方法,采用stream和for循环常规写法

private int getCycleActionCount(Date start, Date end, List<ActionCalendar> calendar) { int count = 0;
for (ActionCalendar calendarDay : calendar) { Date date = calendarDay.getDate();
if (date.after(start) && date.before(end) && calendarDay.isComplete()) {
//在周期内任意一天签到,签到次数自增。count++;
}
}
return count;
}
private int getCycleActionCount2(Date start, Date end, List<ActionCalendar> calendar) {


14

 

return Math.toIntExact(

15

 

calendar.stream()

16

 

.filter(

17

 

//统计周期内签到天数

18

 

t -> (

19

 

t.getDate().after(start) && t.getDate().before(end) && t.isComplete()

20

 

)

21

 

).count()

22

 

);

23

}

 

 

 

这样看两者之间 光从可阅读性上看并没有特别大的区分度。而即使熟练的stream 爱好者,相信写出一段stream代码后也会多看几眼确认性能、缩进是否达到最优。可见在某些场景下无论性能、可读性还是书写便利性都不占优, 此时stream似乎就不是最优选择了。

 

带你读《2022技术人的百宝黑皮书》——stream的实用方法和注意事项(5)https://developer.aliyun.com/article/1339658?groupCode=taobaotech

 

相关文章
带你读《2022技术人的百宝黑皮书》——stream的实用方法和注意事项(3)
带你读《2022技术人的百宝黑皮书》——stream的实用方法和注意事项(3)
带你读《2022技术人的百宝黑皮书》——stream的实用方法和注意事项(3)
|
IDE 开发工具
带你读《2022技术人的百宝黑皮书》——stream的实用方法和注意事项(2)
带你读《2022技术人的百宝黑皮书》——stream的实用方法和注意事项(2)
|
IDE 编译器 API
带你读《2022技术人的百宝黑皮书》——stream的实用方法和注意事项(1)
带你读《2022技术人的百宝黑皮书》——stream的实用方法和注意事项(1)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(4)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(4)
106 0
|
算法
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(3)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(3)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(5)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(5)
108 1
|
网络协议
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(2)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(2)
130 1
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(6)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(6)
|
SQL 缓存 JSON
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(1)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(1)
159 1
|
算法 API
带你读《2022技术人的百宝黑皮书》——stream的实用方法和注意事项(5)
带你读《2022技术人的百宝黑皮书》——stream的实用方法和注意事项(5)