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

在if语句中重构多个条件的最佳方法是什么?[副本]

刘俊语
2023-03-14

我有一个if语句,里面有很多条件,但是条件是完全不同的。看起来真的很笨重。我不确定是否有办法做这件事。

// rqstCriteria is a List
// anotherCriteria is a List
// key# are the different values that I want to see if it has
if (
rqstCriteria.contains(key1) || 
rqstCriteria.contains(key2) || 
rqstCriteria.contains(key3) || 
rqstCriteria.contains(key4) || 
rqstCriteria.contains(key5) && 
(anotherCriteria != null && 
  (anotherCriteria.contains(key1) || 
   anotherCriteria.contains(key2) || 
   anotherCriteria.contains(key3) || 
   anotherCriteria.contains(key4) || 
   anotherCriteria.contains(key5))
{...} 

共有1个答案

米项禹
2023-03-14

首先,使用java-8streams.anymatch将所有键收集到列表中

List<String> list = List.of("key1","key2");  //or Arrays.asList()

if(list.stream().anyMatch(i->rqstCriteria.contains(i)) && list.stream().anyMatch(j->anotherCriteria.contains(j))) {

}

如果要将null检查移到if块之外,最好的方法是返回空的list,或者您可以使用以下方法

if(list.stream().anyMatch(i->rqstCriteria.contains(i)) && 
        Objects.nonNull(anotherCriteria) && 
        list.stream().anyMatch(j->anotherCriteria.contains(j))) {

}
 类似资料:
  • 问题内容: 一个简单的问题,但是Google并没有提供太多帮助。 我有一个带很多条件的if语句(必须检查10或15个常量以查看是否存在任何常量。) 而不是这样写: 有没有办法格式化它 只是想知道是否有更简单的方法来编写此代码,对您的帮助表示赞赏。 编辑 :答案非常有帮助,但是一些人要求我添加更多细节,所以我会这样做以缓解他们的好奇心。我正在创建一个日期验证类,该类需要确保在只有30天的月份中天数不

  • 问题内容: 我正在重构现有代码。它实际上可以正常工作,但是在检查一个变量的值并将第二个变量的值更改为取自固定枚举结构的更新后的值的多个if-else条件下有点混乱。 我对重构和清理此代码的最佳方法感到有些困惑。您是否建议使用开关?还是更优雅的东西? 提前致谢! 问题答案: 至少对于J2SE 1.5转发,您可以为枚举赋予额外的属性。这意味着您可以用类似如下的内容替换整个if-else字符串 现在,在

  • 问题内容: 对于我的工作,我必须开发一个小型Java应用程序,该应用程序可以解析非常大的XML文件(约30万行)以选择非常具体的数据(使用),因此我试图对其进行一些优化。我想知道这两个摘要之间哪个更好: 要么 其他详情: 这些if语句在循环内的每次迭代中执行(约20k次迭代) 的是一种在利用外部函数每次迭代计算 如果将设置为,则无需测试正则表达式是否匹配 谢谢你的帮助。 问题答案: 我遵循的一条黄

  • 我试过这种格式 但这似乎不起作用。

  • 我试图让if语句从多个条件触发,而不使用不同的触发器多次重写该语句。例如。: 你会如何把这些浓缩成一个陈述? 我尝试过使用'or',它导致任何原始输入触发语句,而不管输入是否匹配任一条件。