java – 在不同的方法中将操作追加到Stream是不好的做法?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 在不同的方法中将操作追加到Stream是不好的做法?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1922字,纯文字阅读大概需要3分钟。
内容图文
![java – 在不同的方法中将操作追加到Stream是不好的做法?](/upload/InfoBanner/zyjiaocheng/751/5e1c022d89184e79b91914367a98e8e9.jpg)
假设我的应用程序中有多个类使用的方法.此方法将Stream作为参数并对每个应用终端操作以将数据写入文件,如下所示:
public File writeStreamToTempFile(Stream stream) {
stream.forEach(item -> {
//some code to write item to a file
}
}
这个方法有多个调用者,在某些方法中我需要转换数据,比方说使用map函数,如下所示:
public void exportAnimalsData() {
Stream<Animal> animalStream = //fetch data from a DB
animals.filter(a -> a.type.equals("dog"))
.map(a -> //Do something useful to transform the Dogs);
writeStreamToTempFile(animalStream);
}
并非writeStreamToTempFile方法的所有调用者都需要对流执行其他操作.
所以我的问题是:
将操作应用于不同方法的流是不好的做法?
我在某地读过Stream永远不应该是方法的返回类型(调用者不知道该方法是否已经消耗了流),它是否也适用于方法的参数?
我应该只应用相同方法中所需的所有操作,还是可以在不同的方法中将中间操作附加到同一个流中?
解决方法:
i read somewhere that Stream should never be the return type of a method
不知道你在哪里读到Stream永远不应该是方法的返回类型. (你能用链接更新你的问题吗?).
相反,Stream API的设计者之一Brian Goetz显然不这么认为:
https://stackoverflow.com/a/24679745/340088
(the caller does not know if that method already consume the stream or not)
如果调用者正在获取流,则隐含地理解该流是可用的.如果返回一个消耗的Stream,就像返回一个已关闭的Socket或一个关闭的InputStream.虽然可能在语法上,但它只是糟糕的编码.并不意味着你不应该从一个方法返回一个Socket或一个InputStream,因为一些不好的编码器偶尔会在一个糟糕的状态下返回一个.
相反,monadic样式对象旨在返回. Stream,Optional,CompletableFuture以及所有功能接口(功能,消费者,运算符等)都将被返回,以便可以附加更多功能样式的操作,而无需在现场实际执行该功能.
你发布给我的例子非常合理.您可以通过对管道的其他操作来装饰您的Stream.您可以使用逻辑来决定将哪些操作添加到管道中,并且没有理由不在小方法中正确封装它们.
此外,如果流非常大,携带数十万个元素,如果你返回了一个集合,你只需要在内存中创建一个巨大的集合,产生所有成本的成本,然后再将它们再次流式化以将它们写入文件.没有多大意义吗?
内容总结
以上是互联网集市为您收集整理的java – 在不同的方法中将操作追加到Stream是不好的做法?全部内容,希望文章能够帮你解决java – 在不同的方法中将操作追加到Stream是不好的做法?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。