当前位置: 首页 > 知识库问答 >
问题:

`()->delegate`如何包装流?[副本]

轩辕鸿祯
2023-03-14
public interface MyStream<T> {
    Stream<T> stream();
    static <T> MyStream<T> of(Stream<T> stream) {
        return () -> stream;
    }
}

我在回答中使用了https://softwareengineering.stackExchange.com/A/400492/42195

of方法返回一个返回委托流的调用。但这又是如何翻译成 MyStream 的呢?

共有1个答案

涂溪叠
2023-03-14

如果把代码再分开一点,可能会更容易理解:

public interface MyStream<T> {
    Stream<T> stream();
}
class Util {
    static <T> MyStream<T> of(Stream<T> stream) {
        return () -> stream;
    }
}

它仍然在做同样的事情,只是更容易跟随一点。

然后在第二步,让我们以“经典”的方式不使用lamda表达式来写这个:

public interface MyStream<T> {
    Stream<T> stream();
}
class Util {
    static <T> MyStream<T> of(Stream<T> stream) {
        return new MyStream<>() {
            Stream<T> stream() {
                return stream;
            }
        };
    }
}
return new MyStream<>() {
    Stream<T> stream() {
        return stream;
    }
};
  () -> stream;
//      ^^^^^^^ Return value
//^^ Argument list (in this case empty)
 类似资料:
  • 包装流是对Stream的包装,主要被用于当做其他基础流的基类。 构建包装流 var wrapperStream = new WrapperStream(new MemoryStream()); 函数原型 WrapperStream(Stream stream); 参数 描述 stream 基础流(原始) BaseStream 获取包装流的基础流 var baseStream = wrapper

  • 我是lodash的新手,我已经将lodash安装为 我在我的索引中调用它。js文件作为 然而,这是不工作的,它显示在控制台上的错误为 指数js:1未捕获的语法错误:意外的标识符“\u1” 我没有使用节点。js

  • 我被要求检索树节点的每个叶节点。我很快想到我可以在一行中完成这项工作! 第一眼看上去很不错,但很快它就遇到了一个,如果树深度达到~10,这是我无法接受的。后来我开发了一个没有递归和流的实现(但我的大脑被烤坏了),但我仍然想知道是否有一种方法可以用流做递归,因为我发现不接触流内部是不可能做到的。它需要一个新的Op,比如来做到这一点,否则我必须每一步都将所有结果收集到中,然后再对该进行操作: 不像看起

  • 我想将Python安装恢复到其基本状态,以便开始使用。有没有一种简单的方法可以只卸载那些在Python设置之后安装的软件包?

  • 如何用java流重构它?