Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >.peek()在java 8流中的使用

.peek()在java 8流中的使用
EN

Stack Overflow用户
提问于 2017-06-26 03:51:26
回答 2查看 5K关注 0票数 12

我在流中使用.peek(),但是它被拒绝了,遗憾的是我找不到解决方案。

简化版本:

代码语言:javascript
代码运行次数:0
复制
static boolean fooAddTester(int size) {
    Foo foo = new foo(); //data structure

    return IntStream.range(0, size).
            .peek(i -> synchronized(r){foo.add(i)})
            .allMatch(e -> foo.isLegal());
}

我需要做的是遍历IntStream,并在每次插入之后检查,如果foo数据结构是合法的。这在逻辑上相当于:

代码语言:javascript
代码运行次数:0
复制
static boolean fooAddTester(int size) {
    Foo foo = new foo(); //data structure

    for(int i=0; i<size; i++){
        foo.add(i);
        if(!foo.isLegal())
            return false;
    return true;
}

然而,它更复杂,我正在尝试使用流来简化和学习。

在不使用.peek()的情况下实现同样的方法是这样的:这确实有效--但我只是将问题转移到.allMatch()

代码语言:javascript
代码运行次数:0
复制
return IntStream.range(0, size).
            .allMatch(i -> {
                 synchronized(r){foo.add(i)};
                 foo.isLegal();
             )};

我的问题与这个问题非常相似,不同之处在于我每次都在检查,所以解决方案不起作用。

所以我的问题是:

  • .peek()真的只用于调试还是我可以以这种方式使用它?
  • 有没有更好的解决办法?
  • 我应该用我的第二个解决方案吗?

我正在寻找一个正确的解决方案,而不是一个有效的解决方案,所有这些代码都已经开始工作了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-26 04:38:43

Stream#peek的文档如下所述,主要不是绝对

此方法主要存在(主要是)以支持调试,其中您希望看到元素流经管道中的某个点时的情况。

@Holger完全回答了这个问题:

使用最有用的,查找是否已处理流元素的

他在回答中也指出了一些副作用,peek操作取决于调用了哪个终端操作。因此,在内部使用peek时,您应该小心。

所以正确的方法是只使用for-each循环,因为Stream#collect不支持短路操作

可选的方法是使用peek,因为您可以自己控制流。您需要删除synchornized块,这在这里是不必要的。

代码语言:javascript
代码运行次数:0
复制
return IntStream.range(0, size).peek(foo::add).allMatch(__ -> Foo.isLegal(foo));
票数 5
EN

Stack Overflow用户

发布于 2017-06-26 04:19:28

如果你真的想在你的逻辑之前使用其他的流操作,我只能想出一个方法来做,但我并不是它的忠实粉丝.

代码语言:javascript
代码运行次数:0
复制
 boolean result = true;
    try {
        IntStream.range(0, 10)
                .forEachOrdered(x -> {
                    foo.add(x);
                    if (!Foo.isLegal(foo)) {
                        throw new RuntimeException("just because");
                    }
                });
    } catch (RuntimeException re) {
        result = false;
    }

    System.out.println(result);

显然,您需要用某种异常替换RuntimeException

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44759090

复制
相关文章
jQuery练习——下拉菜单
实现效果:当鼠标移到不同的一级菜单,会显示相应的二级菜单,鼠标移走,二级菜单消失。
颜颜yan_
2022/12/01
27K0
jQuery练习——下拉菜单
jQuery下拉菜单经典案例
jQuery下拉菜单经典案例  源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <
红目香薰
2022/11/29
11.1K0
jQuery下拉菜单经典案例
javascript下拉菜单代码(用jquery做下拉菜单)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/126047.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/01
11.4K0
javascript下拉菜单代码(用jquery做下拉菜单)
jQuery 动态绑定
这是在项目过程中所遇到的一个问题,给 JS 动态生成的元素绑定事件失效,代码如下所示:
Nian糕
2018/08/21
2K0
jQuery 动态绑定
jquery事件绑定
.bind()   为一个元素绑定一个元素处理程序。   .bind(eventType[,eventData],handler(eventObject))     eventType       一个包含一个或多个DOM事件类型的字符串,或自定义事件的名称。     eventData       一个对象,它包含的数据键值对映射将被传递给事件处理程序。     handler(eventObject)       每当事件
用户1197315
2018/01/19
3.6K0
jQuery预绑定
文章作者:Tyan 博客:noahsnail.com  |  CSDN  |  简书
Tyan
2022/05/09
5670
jquery 绑定click事件
有时候需要获得匹配元素相对于其同胞元素的索引位置,此时可以用index()方法获取
Devops海洋的渔夫
2019/05/30
4.5K0
jQuery on绑定事件问题
以前没注意,最近在使用on绑定事件时发现,通过for循环绑定动态绑定时,多个元素最终绑定的都是最后一次事件,不知道用while是不是也是一样,谁有清楚这种现象也可以说一下原因!!!
sucl
2019/08/07
2.5K0
jQuery简单实现二级下拉菜单
下拉菜单原理:滑过一级的li才让第二层的li显示,利用jq简单的抓取元素,让一级下的二级li显示就能解决,使用jq比css的思路更加明确!
十月梦想
2018/08/29
4.3K0
jquery 使用 unbind 解决重复绑定执行事件
在jquery监听click事件的时候会出现点击一次没有重复,点击第二次就重复的情况。出现这个问题的原因是之前的click事件被绑定后,并没有解绑。
Devops海洋的渔夫
2019/08/02
1.6K0
jquery绑定事件的坑,重复绑定问题
我实现点击table表格中的删除按钮,找到当前按钮的祖先元素tr 然后删除该行,但是我首先点击删除的时候要先弹出提示框,是否要下载,这时在点击删除按钮删除,之前没有考虑到事件重复绑定问题,所以每次点击删除的时候就会多选择几行,之后选择的越来越多,经过网友解答,成功解决,先把重复绑定的删除的click事件解绑再继续绑定,就没问题。
蓓蕾心晴
2018/07/24
2.4K0
第72天:jQuery实现下拉菜单
1、块元素居中:给块元素本身设置:margin:0 auto;,块元素必须设置宽度
半指温柔乐
2018/09/11
1.9K0
JQuery 事件绑定不生效
一个同时问我,JQuery事件绑定为什么不生效,最好通过查找,发现了问题。 一般而言,JQuery事件绑定不生效,是一些新手经常遇到的问题,其实都是简单的问题,大概分两种情况。 先上代码,以下两个button的事件绑定都不生效。
用户3158888
2019/05/29
2.6K0
Jquery获取DOM绑定事件
获取到当前正在执行的事件: $('#testDive').bind('click', function(event){alert('event: ' + event.type)}); 获取所有绑定事件: $._data(document.getElementById('testDive'), 'events');
就只是小茗
2018/10/10
2.2K0
jquery 绑定回车(Enter )事件
如果想模拟Tab键,只要写成 if (window.event.keyCode==13) window.event.keyCode=9 就行了,它会跳到另一个元素上。
Yiiven
2022/12/15
2.8K0
js_jQuery【下拉菜单联动dom操作】
下拉菜单联动dom操作案例  源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </hea
红目香薰
2022/11/29
14.1K0
js_jQuery【下拉菜单联动dom操作】
使用 jQuery 对下拉菜单 SELCET 进行增加、删除和修改的操作
jQuery 获取下拉菜单 SELECT 选择的 Text 和 Value: //获取Select选择的Text var checkText=jQuery("#select_id").find("option:selected").text(); //获取Select选择的option Value var checkValue=jQuery("#select_id").val(); //获取Select选择的索引值 var checkIndex=jQuery("#select_id ").get(
Denis
2023/04/15
1.3K0
jQuery 事件绑定 和 JavaScript 原生事件绑定
jQuery 中提供了四种事件监听绑定方式,分别是 bind、live、delegate、on,
Krry
2018/09/10
5.7K0
jQuery 事件绑定 和 JavaScript 原生事件绑定
使用jQuery.data()查看元素上绑定的事件
最近遇到一个诡异的问题,发现我添加在一个HTMLElement片段上面的事件绑定,会在后续的流程中,无故丢失了。但是,我不知道它是什么时候丢失的。
libo1106
2018/08/08
1.9K0
前端基础-jQuery简单事件绑定
第4章 简单事件绑定 所有事件在jquery中都是jquery对象的方法 click(handler) 单击事件 mouseover(handler) 鼠标悬浮事件 mouseout(handler) 鼠标离开事件 ... <input type="button" value="我是一个按钮" id="btn"> <script> $(function(){ $('#btn').click(function(){ alert("来了老弟~"); }
cwl_java
2020/03/26
6900

相似问题

使用jquery重新绑定Kendo下拉菜单

20

无法绑定jquery下拉菜单

10

在ruby on rails中使用jQuery绑定下拉菜单

10

使用jquery绑定或重新加载Select 2下拉菜单

20

在asp.net中使用下拉菜单绑定图像的jQuery

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文