可折叠If语句

2024-03-14

我最近使用 PMD(嵌入 hudson)偶然发现以下警告,我的代码似乎受到了影响可折叠If语句,我并不完全理解。代码看起来像这样

// list to be filled with unique Somethingness
List list = new ArrayList();

// fill list
for (SomeObject obj : getSomeObjects()) { // interating 
  if (!obj.getSomething().isEmpty()) { // check if "Something" is empty *
    if (!list.contains(obj.getSomething())) { // check if "Something" is already in my list **
      list.add(obj.getSomething()); // add "Something" to my list
    }
  }
}

在我看来,这段代码并不是更“可折叠”(否则对于下一个阅读代码的人来说,它会更加难以阅读)。另一方面,我想解决这个警告(不停用 PMD ;)。


一种可能性是排除重复的obj.getSomething()然后折叠嵌套的if声明:

for (SomeObject obj : getSomeObjects()) {
  Something smth = obj.getSomething();
  if (!smth.isEmpty() && !list.contains(smth)) {
      list.add(smth);
  }
}

在我看来,结果非常可读,并且不应再触发 PMD 警告。

另一种方法是更换List with a Set,并避免显式的contains()全部检查。用一个Set也会有更好的计算复杂度。

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

可折叠If语句 的相关文章

  • Java 7 watchservice获取文件更改偏移量

    我刚刚尝试使用 Java 7 WatchService 来监视文件的更改 这是我敲出的一些代码 WatchService watcher FileSystems getDefault newWatchService Path path Pa
  • ProcessBuilder 未正确执行 Java 类文件

    在一个java文件中 我调用命令行语句来执行另一个java文件 这就是我正在做的 List
  • 使用 Java 的 OpenId 提供者/服务器

    我正在尝试使用 OpenId 服务增强现有的 Java Web 应用程序 以便登录用户可以使用我的 Web 应用程序作为 OpenId 提供程序登录另一个启用 OpenId 的应用程序 My first attempt was to use
  • 如何将 Excel 中的图表导出为图形

    我有一系列 Excel 电子表格 每个电子表格至少包含一页数据和一页根据数据创建的图表 我需要捕获 不从数据中重新生成 将现有图表作为网络友好图像 这可以通过 Java 或 Net 实现吗 我知道 POI 的东西 Java 不会这样做 或者
  • Lambda 表达式更慢?

    我有下面这段代码 PriorityQueue
  • Spring - 两种不同的 POST 方法,具有相同的 URL,但生成的内容类型不同

    我有以下控制器 RequiredArgsConstructor RestController public class OwnerViewController implements ApiOwnerViewController privat
  • 当目标是属性时,@Throws 不起作用

    在看的同时这个问题 https stackoverflow com q 47737288 7366707 我注意到申请 Throws to a get or setuse site 没有影响 此外 唯一有效的目标 for Throws ar
  • Java SWT 用户输入验证

    在 SWT 中进行用户输入验证时 Java 约定是什么 我读到有 FieldEditors 它们是非常方便的字段 但遗憾的是仅适用于首选项和对话框 我还了解到有一个 IValidator 接口 但它经常与数据绑定一起使用 就我而言 我的大多
  • 如何调试内部错误?

    所以我有课Foo最终应该调整并重新加载类 它也有一个方法 private void redefineClass String classname byte bytecode ClassFileLocator cfl ClassFileLoc
  • kafka消费端Offsets的一致性

    我有复制因子为 3 的卡夫卡主题min insync replicas 2 一个向该主题发送 X 条消息的生产者acks all 一段时间后 1 分钟内 在所有消息发送到主题后 将使用 java kafka 客户端为此主题创建新的消费者 使
  • 如何在生产中安全地更改会话 cookie 域或名称?

    我们最近意识到我们的会话 cookie 正在被写入我们网站的完全限定域名 www myapp com 例如 MYAPPCOOKIE 79D5DB83 domain www myapp com 我们希望将其切换为可以跨子域共享的cookie
  • 测试 Hessian remoting-servlet.xml

    我们使用 Hessian 来实现富客户端和服务器之间的通信 由于移动和重命名 remoting servlet xml 中的条目有时会与实际的类名不匹配 因此 我正在寻找一种简单的方法来测试远程处理 xml 有没有简单的方法可以做到这一点
  • 在单独的模块中使用 Spring AOP 方面

    我在一个 Maven 项目模块中有一个方面 com x NiceAspect 在一个单独的 Maven 模块中有一个类 com x NiceClass 这些模块具有相同的 POM 父级 共同创建一个项目 我想要实现的目标是拥有一个通用的方面
  • 将 try catch finally 块放入另一个 finally 块中

    try catch finally try catch finally 上面的代码好不好 是的 你可以这样做 实际上 在处理想要正确关闭的流时 您甚至需要这样做 InputStream in try catch finally try in
  • Spring Oauth2. DaoAuthenticationProvider 中未设置密码编码器

    我对 Spring Oauth 和 Spring Security 很陌生 我正在尝试在我的项目中使用 client credentials 流程 现在 我设法使用自己的 CustomDetailsS ervice 来从系统中已存在的数据库
  • 为什么我们在同一台服务器上使用多个应用程序服务器实例

    我想这是有充分理由的 但我不明白为什么有时我们会在同一物理服务器上放置例如 5 个具有相同 Web 应用程序的实例 这与多处理器架构的优化有关吗 JVM 或其他允许的最大内存限制 嗯 过了很长一段时间我又看到这个问题了 一台机器上的多个 J
  • SWIG C 函数指针和 JAVA

    我有一些 C 代码 其中一个方法有一个函数指针作为参数 我正在尝试在我的 Android 应用程序中使用 C 代码 我决定使用 SWIG 来完成生成我需要的 java 文件的所有工作 一切都适用于常规函数 没有函数指针作为参数的函数 但我不
  • 为什么ArrayList的非静态内部类SubList有一个成员变量“parent”?

    java util ArrayList SubList 是 java util ArrayList 的非静态内部类 这意味着它保存对其封闭类的引用 我们可以使用ArrayList this来访问java util ArrayList的成员
  • 如何在非Spring的构造型类中使用@Autowired

    我想在此类中使用该存储库 但是当我放置像 Component 这样的构造型时 我从 IDE 收到错误 无法自动装配 未找到 身份验证 类型的 bean public class CustomMethodSecurityExpressionR
  • 注释处理工具<-检查有效注释

    I have ColumnMetadata index 1 ColumnMetadata index 2 ColumnMetadata index 3 我必须使用 APT 检查索引号是否唯一 我不知道该怎么做 我看不懂教程 一般我在网上找资

随机推荐

  • 使用 ORMLite 在数据库中表示字符串列表

    首先我是 ORMLite 的新手 我希望我的模型类有一个字符串列表字段 它最终会保存我的模型对象的标签列表 我应该使用哪些 ORMLite 注释 首先我不想有一个包含所有标签的表格 然后使用 ForeignCollectionField 我
  • Java:一个文件中的多个类声明

    在 Java 中 您可以在单个文件中定义多个顶级类 前提是其中最多有一个是公共的 请参阅JLS 7 6 http docs oracle com javase specs jls se8 html jls 7 html jls 7 6 参见
  • 从 MS SQL 中的 PHP PDO 存储过程返回 Select *

    对于未来的用户 这个问题的底部包含更正的工作代码 我知道 Select 不是最好的 但在这个示例中 我尝试从 php 调用存储过程并返回整个结果集 以便我可以在代码中循环遍历数组 这是我当前的存储过程 USE hanoncs AskMe G
  • 如何在codeigniter中获取http请求正文数据?

    我在从 IOS obj c 客户端将 JSON 编码数据发布到 CI 控制器时遇到问题 我相信我的问题与提到的问题相同here https stackoverflow com questions 8569150 codeigniter re
  • 在嵌套对象上使用 JsonConvert.DeserializeObject

    我想在加载应用程序时使用 JSON Net 来处理配置文件的解析 将所有 KVP 保持在同一范围内绝对没问题 不过 我想将其分解为子类别 例如 Settings WebServer Settings GameServer 等 为了便于阅读
  • ffmpeg从mp4中提取基本流

    我已经使用 Bambuser 的 ffmpeg 端口成功将 ffmpeg 库移植到 Android 我目前正在研究 ffmpeg 的源代码 特别是 ffplay c 和 api examples c 文件 我想从 Android 2 2 录
  • 找到 numpy 数组中最大的正方形

    我正在尝试解决这个算法问题 在 numpy 数组中找到只有一个值的最大平方 示例图片 我的代码花费了太多时间 有办法提高速度吗 import numpy as np answer 0 def allsame board memory boa
  • 使用单层感知器求解 XOR

    我一直听说 XOR 问题不能通过单层感知器 不使用隐藏层 来解决 因为它不是线性可分的 我知道没有线性函数可以区分类别 但是 如果我们使用像 sin 或 cos 这样的非单调激活函数 情况仍然如此吗 我想这些类型的函数可能能够将它们分开 Y
  • Caliburn.Micro:以编程方式创建和绑定视图

    我目前正在 Caliburn Micro 中尝试视图合成 我有一个工作示例 其中我通过 View Model 附加属性路由将多个基于用户控件的视图注入到我的主 shell 中 到目前为止 一切都很好 在我的应用程序中 我正在使用主要由 Wi
  • 多处理 numpy 未定义错误

    我正在使用以下测试代码 from pathos multiprocessing import ProcessingPool as Pool import numpy def foo obj1 obj2 a obj1 2 b numpy as
  • 聚合elasticsearch中的值数组

    我需要聚合一个数组 如下所示 两个文档示例 index log type travels id tnQsGy4lS0K6uT3Hwzzo g score 1 source state saopaulo date 2014 10 30T17
  • (int_1 += *pointer++ = int_2++) < int_3 是什么意思?

    我正在读书这个之前的答案 https stackoverflow com a 14164818 1894277其中有一段我无法理解的C代码 它本质上看起来像这样 if int 1 pointer int 2 lt int 3 continu
  • 当我尝试使用 CComObject 函数 CreateInstance 时,_pAtlModule 指针为空

    我正在开发 OPC OLE 过程控制 客户端程序 使用异步 CALLBACK 方法使用 KepServer 从 PLC 获取数据 但是我遇到了问题 CComObject
  • 为什么 bash 在 Windows 中冻结?

    我正在 Windows 中运行 bash 程序 该程序与 msys 和 mingw 一起安装 我正在尝试跑步 configure 但是 每当我这样做时 配置都会冻结 checking whether make sets MAKE 您能想到为
  • 如何使用 JDK 11/Maven/Eclipse IDE 运行 JavaFX 应用程序

    问题 从 Eclipse IDE 运行基于 Maven 非模块项目 项目名称 howdyjfx 的 JavaFX 应用程序会生成以下编译错误 ERROR Failed to execute goal org codehaus mojo ex
  • clearInterval() 不会停止 setInterval() - Firefox 扩展开发

    我正在修改篡改数据 这将允许我将其观察到的 HTTP 请求 响应发送到服务器 到目前为止 该功能已正确实现 下一步是自动化此过程 我希望使用 复选框 类型的工具栏菜单按钮来打开和关闭此功能 到目前为止 我在 XUL 中有这段代码
  • File.Copy 目标文件是目录,而不是文件。

    我可能没有正确执行此操作 并且浏览 MSDN 库对我没有多大帮助 我正在尝试将数据库从项目文件夹复制到另一个位置 我最初尝试了桌面 它指出该目录不可用 这就是我目前所拥有的 private string currentDb J Projec
  • 无法从多维数组的初始值设定项推断边界

    以下代码无法编译 int main int a 0 1 2 3 产生的错误消息是 error declaration of a as multidimensional array must have bounds for all dimen
  • Git 拉取 Push.default 警告

    当我将 git commit 推送到远程存储库时 出现了以下警告 clyde browns computer 2 bloccit clydiscope git commit m Installed gem faker and generat
  • 可折叠If语句

    我最近使用 PMD 嵌入 hudson 偶然发现以下警告 我的代码似乎受到了影响可折叠If语句 我并不完全理解 代码看起来像这样 list to be filled with unique Somethingness List list n