You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Stream过滤:AND条件带括号与不带括号的结果差异疑问

Java Stream过滤代码括号问题解析

首先明确:你给出的两段代码逻辑完全等价,括号不会改变&&的运算优先级,理论上执行结果应该完全一致。Java中&&的优先级远高于lambda表达式的箭头->,加不加括号包裹单个条件,最终的逻辑判断都是先分别计算两个equals的布尔值,再做逻辑与运算。

你觉得结果不同,大概率不是括号的问题,可能的真实原因包括:

  • 两次执行代码时,myList的内容不一致:比如第一次执行前列表里有符合条件的元素,第二次执行前元素被修改、删除或新增了
  • 并发修改问题:执行第二段代码时,有其他线程正在修改myList中的元素
  • 代码笔误(你可能误写了代码2的其他部分):比如不小心把&&写成了||,或者条件中的字符串拼写错误(比如"MEXICO"写成"Mexico")
  • mapStatus的访问方式问题:如果mapStatus是类的私有成员变量,直接通过a.mapStatus访问可能不符合封装规范,某些情况下可能因访问权限导致异常(但你说代码2能执行只是无结果,这点可能性较低)

建议的排查步骤:

  • 在两段代码执行前,分别打印myList的所有元素,确认列表内容完全相同
  • 手动遍历myList,逐个检查元素的city和mapStatus值,确认实际有多少符合条件的元素
  • 确保执行两段代码时,没有其他线程对myList进行修改
  • 仔细核对代码2的实际写法,确认没有其他隐形错误

内容的提问来源于stack exchange,提问作者rickygrimes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:25:26