Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java8:流优化,在同一实例上调用同一方法两次_Java_Optimization_Java 8_Java Stream_Monads - Fatal编程技术网

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进行了更改。多亏了你的注意