由于最近的旅行限制,我最近发现自己编写了比平常更多的代码。 复习完之后,我发现我对此不太满意。 我相信这是因为Java是一种“古老”的语言,但是它已经发展了很多,尤其是在其最新版本中。 在长时间使用一种语言时,一定会养成习惯,无论好坏。 语言改变时,需要有意识地努力改变这些习惯。 但是,这是必需的,因为一种语言的良好实践可能会变成另一种语言的不良实践。
我开始使用1.3版-与旧版相比,我感觉像个新手。 但是,这并没有改变我关于实践的观点。 在这篇简短的文章中,我想首先展示一下我编写的原始代码以及如何重新编写它。 一切都始于流。
persons.stream()
.filter(person->personinstanceofCustomer)
.map(person->(Customer)person)
.map(Customer::getSalesRep);
虽然此代码有效-并且易于阅读,但对我来说却是错误的。 一部分是功能性的,另一部分使用传统的运算符。 使用后者和前者感觉很奇怪。
实际上,以上使用的所有运算符都有一个等效的API。 因此,以上代码可以很容易地重写为:
persons.stream()
.filter(Customer.class::isInstance)
.map(Customer.class::cast)
.map(Customer::getSalesRep);
请注意,这些不是新方法! 从1.1版开始, Class.isInstance()
可用。 自2004年发布1.5版以来, Class.cast()
就可用了!
您可能会将上述代码视为函数式编程... 尽管如此,Java通过提供允许开发人员专注于“内容”而不是让他们处理“方式”的API朝着更多的功能代码取得了进步。 如果您开始使用流,则应该接受该流并开始使用现代API。 在所有情况下,了解后者都是值得的。
翻译自: https://blog.frankel.ch/changing-coding-habits-stream-friendly/