Java 是否有相当于 C# 的“yield”关键字?

2023-12-10

我知道 Java 本身没有直接的等价物,但也许有第三方?

真的很方便。目前我想实现一个迭代器,它生成树中的所有节点,大约有五行带有yield的代码。


我知道的两个选项是Aviad Ben Dov 2007 年的 infomancers-collections 图书馆 and Jim Blackler 2008 年的 YieldAdapter 库(在另一个答案中也提到了)。

两者都允许您编写代码yield return- 类似于 Java 中的构造,因此两者都可以满足您的要求。两者之间的显着差异是:

力学

Aviad 的库使用字节码操作,而 Jim 的库使用多线程。根据您的需求,每种方法可能都有其自身的优点和缺点。 Aviad 的解决方案可能更快,而 Jim 的解决方案更便携(例如,我认为 Aviad 的库不适用于 Android)。

界面

Aviad 的库有一个更清晰的界面 - 这是一个示例:

Iterable<Integer> it = new Yielder<Integer>() {
    @Override protected void yieldNextCore() {
        for (int i = 0; i < 10; i++) {
            yieldReturn(i);
            if (i == 5) yieldBreak();
        }
    }
};

虽然吉姆的要复杂得多,要求你adept一个通用的Collector其中有一个collect(ResultHandler)方法……呃。但是,您可以使用类似的东西Zoom Information 围绕 Jim 的代码进行的包装这大大简化了:

Iterable<Integer> it = new Generator<Integer>() {
    @Override protected void run() {
        for (int i = 0; i < 10; i++) {
            yield(i);
            if (i == 5) return;
        }
    }
};

License

Aviad 的解决方案是 BSD。

Jim 的解决方案是公共领域的,上面提到的它的包装器也是公共领域的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 是否有相当于 C# 的“yield”关键字? 的相关文章

随机推荐

  • 如何在tomcat中设置org.apache.tomcat.util.digester.EnvironmentPropertySource

    我想通过 Kubernetes 为 tomcat 中的 server xml 设置环境变量 这是我的部署 yaml apiVersion v1 kind Pod metadata name tomcat test pod env name
  • 如何使用 Greasemonkey 自动提交表单?

    我正在尝试使用greasemonkey 自动提交表单 但我不知道如何使用此按钮来完成此操作 该按钮似乎具有以下属性 a class blue button href javascript void 0 onclick Form submit
  • 标签栏中的自定义字体

    Hey 有没有办法将选项卡栏的字体设置为例如黑板 我已经看到了字体大小的问题 并尝试使用字体 但循环无法解决 如果无法使用自定义字体 是否可以删除所有文本并使选项卡栏的项目覆盖整个选项卡 或者我可以以某种方式将 imageView 放在选项
  • 使用map迭代两个数组

    目前在 React 中 我正在使用array map function text index 迭代数组 但是 我如何使用 map 同时迭代两个数组 EDIT var sentenceList sentences map function t
  • 如何设置共享默认文件夹的 Outlook 子文件夹?

    我正在尝试从共享 Outlook 收件箱的子文件夹中提取信息 当我将文件夹设置为共享收件箱 olFolderInbox 时 代码可以完美运行 但是 当我将其设置为子文件夹时 代码有时会失败 我确保子文件夹名称是正确的 这是我的代码 Dim
  • 在 PowerShell 中检查 IEnumerable 是否为空

    是否有本地 PowerShell 方法来测试 如果IEnumerable是空的 我知道我可以打电话Linq Enumerable Any像这样 Linq Enumerable Any enumeration 但我希望有一种更本土化的方式 很
  • Google Drive PHP SDK 保存无标题文件

    我正在使用以下函数来插入文件 function insertFile service title description parentId mimeType filename file new DriveFile file gt setTi
  • 带有居中 UISlider 和两个图像的自定义 UITableViewCell

    我想以编程方式创建自定义UITableViewCell with a UISlider在中心和两张图片在任一端 有关示例 请参阅任何 iOS 设备上的亮度设置 它的中心有一个 UISlider 两端有两个类似太阳的图像 一大一小 这基本上就
  • C++ 运行时错误:添加无符号偏移量?

    我写了以下内容来检查文本是否是回文 我在 leetcode 上运行它 但出现错误 class Solution public bool isPalindrome string s int l 0 r s length 1 while l
  • 无法从 Android 中的 onOptionsItemSelected 完成活动

    我正在尝试从菜单选项关闭 活动 当菜单项menu close activity被选中 并且在调试时 我注意到调试器总是从 return true 步骤跳转到默认值 我尝试使用ActivityClassName this finish 但我仍
  • 如何在Recyclerview中实现CountDownTimer?

    您好 我正在开发一个设置倒计时的小应用程序 现在我希望在回收器视图内的背景前看到这个倒计时 因此 最终用户将设置多个倒计时器 这些计时器将在回收器视图中以背景显示 我现在所做的远非完美 但它朝着我想要的方向发展 我现在遇到的唯一问题是 因为
  • 在sencha touch 2中使用oAuth连接facebook

    sencha touch 2 没有提供任何与 facebook 连接的函数 库吗 到目前为止我还不太清楚 我们可以在 sencha touch 中使用 facebook javascript sdk 吗 我发现以下教程很好 我们可以将它与
  • 如何将 Postgres any-clause 与 JPA/Hibernate 本机查询(数组参数)结合使用

    所以我们有大量的 Postgres SQL 查询存储在文件中并从 PHP 中使用 任务是用Java取代PHP 我们希望 按原样 重用尽可能多的查询 以保持迁移路径较短 我无法让数组参数起作用 这是一个查询示例 update user dev
  • 如何创建不会覆盖 META-INF/services 下条目的 fat jar

    我有以下 gradle 构建配置 plugins id com github johnrengelman shadow version 1 2 3 group abc version 1 0 SNAPSHOT apply plugin ja
  • 如何使用 python 读取联系人的 Whatsapp 消息?

    我正在构建一个在指定时间登录 Zoom 的机器人 并且链接是从 Whatsapp 获取的 所以我想知道是否可以直接从 Whatsapp 检索这些链接 而不必将其复制粘贴到 python 中 谷歌充满了发送消息的指南 但是有什么方法可以读取和
  • 将 YYYYMMDD 字符串转换为 MM/DD/YYYY 字符串

    我有一个以 YYYYDDMM 格式存储为字符串的日期 我想以 MM DD YYYY 格式显示该值 我正在用 c 编程 我当前使用的代码如下 txtOC31 Text dr OC31 ToString Trim strOC31date dr
  • 将图像上传到 Google Cloud Storage (Java)

    我想开发一个java应用程序 适用于pc 可以将任何图片上传到谷歌云存储 尽管我花了整个晚上的时间来寻找解决方案 但我不知道如何开始 你们中有人有将图像上传到 Google Cloud Storage 的经验吗 谷歌云存储有更好的替代品吗
  • 将 Matlab 函数结果缓存到文件

    我正在用 Matlab 编写一个模拟 我最终会运行这个模拟数百次 在每次仿真运行中 都有数百万个仿真周期 在每个周期中 我都会计算一个非常复杂的函数 该函数需要 0 5秒完成 函数输入是一个长位数组 gt 1000 位 这是一个数组0 an
  • 如何使用单个命令在 Apache Kafka 中创建主题列表

    截至目前 我正在使用以下命令一一创建一个主题 sh bin kafka topics create zookeeper localhost 2181 topic sdelivery replication factor 1 partitio
  • Java 是否有相当于 C# 的“yield”关键字?

    我知道 Java 本身没有直接的等价物 但也许有第三方 真的很方便 目前我想实现一个迭代器 它生成树中的所有节点 大约有五行带有yield的代码 我知道的两个选项是Aviad Ben Dov 2007 年的 infomancers coll