Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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
Java 如果在内部,则每个循环都要流_Java_Java Stream - Fatal编程技术网

Java 如果在内部,则每个循环都要流

Java 如果在内部,则每个循环都要流,java,java-stream,Java,Java Stream,我正在尝试将以下代码放入流: for (Engine engine : engines) { if (engine.getId().equals(rollingStockId)) { return engine; } } for (TrainSet trainSet : trainSets) {

我正在尝试将以下代码放入流:

            for (Engine engine : engines) {
                if (engine.getId().equals(rollingStockId)) {
                    return engine;
                }
            }
            for (TrainSet trainSet : trainSets) {
                if (trainSet.getId().equals(rollingStockId)) {
                    return trainSet;
                }
            }
            throw new LogicException("there is no train-set or engine with ID "+ rollingStockId);

我尝试了return engines.stream.filterengine->engine.getId.equalsrollingStockId;还有其他一些变体,但都不起作用。我对streamapi比较陌生。这样做有可能或有用吗?

您的思路是正确的。首先调用流,然后过滤,然后。像


如果您只希望返回单个项目(本例中的第一个项目),则需要:

return engines.stream.filtere->e.getId.equalsrollingStockId.findFirst;
请注意,findFirst将在示例中返回一个可选选项。如果在未找到匹配项的情况下预期返回值为null,请添加另一个OrelSelsNull调用。但通常情况下,最好通过使用可选类型来明确缺少值的可能性。如果要将任何其他对象构造为回退值,请熟悉OrelGet方法,该方法需要lamdba,因此会根据原始for循环后面的内容延迟计算

或OrelsNull。如果集合中没有与条件匹配的项,get将引发异常。OP中缺少该信息。可能会出现异常,但OrelSetThrow更显式,或者null也可能是有效的返回值,甚至可能是空的引擎实例OrelSetEngine::newThank you。如果找不到匹配项,则不应返回任何内容。如何做到这一点?我已经编辑了我的原始问题,以澄清我的问题。@DonaldDuck在这种情况下,有一个API可以执行OrelThow而不是get。
return engines.stream()
        .filter(engine -> engine.getId().equals(rollingStockId))
        .findFirst()
        .get(); // <-- but better to return the Optional type.