Java8:流优化,在同一实例上调用同一方法两次
流是否有缓存或优化相同的调用Java8:流优化,在同一实例上调用同一方法两次,java,optimization,java-8,java-stream,monads,Java,Optimization,Java 8,Java Stream,Monads,流是否有缓存或优化相同的调用 list.stream() .filter(bean -> manager.find(bean.getID()).getApi() != null) .peek(bean -> { Entity entity = manager.find(bean.getID()); //... logic with entity here
list.stream()
.filter(bean -> manager.find(bean.getID()).getApi() != null)
.peek(bean -> {
Entity entity = manager.find(bean.getID());
//... logic with entity here
}
});
迭代期间将调用多少次
manager.find()
?您能提出更好的方法来实现这段代码吗?您可能希望采用另一种方法:
list.stream()
.map(bean -> manager.find(bean.getID()))
.filter(entity-> entity.getApi() != null)
.forEach(entity -> { /* logic here*/ });
您可能希望以另一种方式进行:
list.stream()
.map(bean -> manager.find(bean.getID()))
.filter(entity-> entity.getApi() != null)
.forEach(entity -> { /* logic here*/ });
答复
将其更改为:
list.stream()
.map(bean -> manager.find(bean.getID()))
.filter(bean -> bean.getApi() != null)
.forEach(bean -> {
//TODO
});
map
将转换所有元素中的call manager.find,使用manager.find(bean.getID())在内存中加载
地图示例:
Stream.of(1,2,3,4,5,6).map(String::valueOf).forEach(System.out::println)代码>
Stream.of(1,2,3,4,5,6)
->我们有一个整数流
map(String::valueOf)
->我们将为流中的所有元素调用String.valueOf(i)
,将其转换为字符串流
forEach(System.out::println)代码>将打印所有元素(现在为字符串)
链接
答案
将其更改为:
list.stream()
.map(bean -> manager.find(bean.getID()))
.filter(bean -> bean.getApi() != null)
.forEach(bean -> {
//TODO
});
map
将转换所有元素中的call manager.find,使用manager.find(bean.getID())在内存中加载
地图示例:
Stream.of(1,2,3,4,5,6).map(String::valueOf).forEach(System.out::println)代码>
Stream.of(1,2,3,4,5,6)
->我们有一个整数流
map(String::valueOf)
->我们将为流中的所有元素调用String.valueOf(i)
,将其转换为字符串流
forEach(System.out::println)代码>将打印所有元素(现在为字符串)
链接
没有,stream没有钱。你是说“缓存”?你的代码毫无意义。首先,它不会编译,因为您有一个额外的}
。第二,没有终端操作,因此没有流式传输。如果您的代码是一个片段,后面还会有更多,我们不知道您以后是否需要bean
,但是如果不需要,您可以使用.map(bean->manager.find(bean.getID())
。为什么要这样做?如果你想要一个流
做一个!这就是map
方法的作用。。。此外,您使用的peek
也很可怕peek
设计用于检查飞行中的物品,而不是执行业务逻辑。不,stream没有任何资金。你是说“缓存”?你的代码毫无意义。首先,它不会编译,因为您有一个额外的}
。第二,没有终端操作,因此没有流式传输。如果您的代码是一个片段,后面还会有更多,我们不知道您以后是否需要bean
,但是如果不需要,您可以使用.map(bean->manager.find(bean.getID())
。为什么要这样做?如果你想要一个流
做一个!这就是map
方法的作用。。。此外,您使用的peek
也很可怕peek
设计用于检查飞行中的项目,而不是执行业务逻辑。值得注意的是,如果没有终端操作,peek
绝对不会执行任何操作…是..针对forEach进行了更改。值得注意的是,在没有终端操作的情况下,peek
完全不起任何作用…是的..为forEach进行了更改。多亏了你的注意