Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 替代if-else语句或更好的方法_Java_If Statement_Conditional_Conditional Statements - Fatal编程技术网

Java 替代if-else语句或更好的方法

Java 替代if-else语句或更好的方法,java,if-statement,conditional,conditional-statements,Java,If Statement,Conditional,Conditional Statements,UI上有4个不同的用户输入字段,如Multiselect下拉列表。用户可以提供不同的输入字段组合以缩小结果集。(从多选选项中选择全部/少数选项) 示例: 2个多选选项 具有元素{“10xyz1”、“11xyz1”、…}的多选选项A 具有元素{“xyz101”、“abc111”、…}的多选选项B 2^2种可能的输入组合(提示:二进制真值表): 1) 从多选选项A中选择所有图元&&从多选选项B中选择所有图元 2) 从多选选项A中选择所有图元&&从多选选项B中选择少数图元 3) 从多选选项A中选择几个

UI上有4个不同的用户输入字段,如Multiselect下拉列表。用户可以提供不同的输入字段组合以缩小结果集。(从多选选项中选择全部/少数选项)

示例: 2个多选选项

具有元素{“10xyz1”、“11xyz1”、…}的多选选项A

具有元素{“xyz101”、“abc111”、…}的多选选项B

2^2种可能的输入组合(提示:二进制真值表):

1) 从多选选项A中选择所有图元&&从多选选项B中选择所有图元

2) 从多选选项A中选择所有图元&&从多选选项B中选择少数图元

3) 从多选选项A中选择几个图元&&从多选选项B中选择所有图元

4) 从多选选项A中选择几个图元&&从多选选项B中选择几个图元

注意:必须从任一选项中至少选择一个元素

我使用了if-else语句来实现我的逻辑(对于每个可能的选择,我有单独的mongo集合,用于4个字段,16个可能的组合,所以有16个mongo集合),但是问题是代码看起来很难看,有很多if-else语句,而且如果UI中添加了一个字段,那么我必须选中add-add-extractional语句

目前,条件if-else语句的数量为2^N(其中N是多选下拉输入字段的数量)。

代码段:


switch case
IIf
表达式如何

开关盒
将更清晰,并将
if else
内容分离为功能:

void FunctionName()
{
        collectionName = CollectionNames.ME_USAGE_MONTH_YEAR_NODE_PACKAGE.toString();
        query.addFilterField("_id.node", MongoQuEry.OP_IN, filter.getNode());
        query.addFilterField("_id.package", MongoQuEry.OP_IN, 
        filter.getSubscriberPackage());
}

switch case
IIf
表达式如何

开关盒
将更清晰,并将
if else
内容分离为功能:

void FunctionName()
{
        collectionName = CollectionNames.ME_USAGE_MONTH_YEAR_NODE_PACKAGE.toString();
        query.addFilterField("_id.node", MongoQuEry.OP_IN, filter.getNode());
        query.addFilterField("_id.package", MongoQuEry.OP_IN, 
        filter.getSubscriberPackage());
}

您可以通过对常见条件进行分组来创建一个决策树,例如,如果每次a为true时,您都希望执行method1(),而不是在a为true的每个“if”上编写这行代码,您可以首先检查a是否为true,然后执行此公共代码块,然后检查其他条件,如:

而不是写:

if(a && b) {
     example.method1();
     example.method2();
     // more code 1
} else if(a && !b) {
     example.method1();
     // more code 2
} else if(!a && b) {
     example.method2();
     // more code 3
} else if(!a && !b) {
     // more code 4
}
你可以写:

if(a) {
     example.method1();
     if(b) {
          example.method2();
          // more code 1
     } else {
          // more code 2
     }
} else {
     if(b) {
          example.method2();
          // more code 3
     } else {
          // more code 4
     }
}

您可以通过对常见条件进行分组来创建一个决策树,例如,如果每次a为true时,您都希望执行method1(),而不是在a为true的每个“if”上编写这行代码,您可以首先检查a是否为true,然后执行此公共代码块,然后检查其他条件,如:

而不是写:

if(a && b) {
     example.method1();
     example.method2();
     // more code 1
} else if(a && !b) {
     example.method1();
     // more code 2
} else if(!a && b) {
     example.method2();
     // more code 3
} else if(!a && !b) {
     // more code 4
}
你可以写:

if(a) {
     example.method1();
     if(b) {
          example.method2();
          // more code 1
     } else {
          // more code 2
     }
} else {
     if(b) {
          example.method2();
          // more code 3
     } else {
          // more code 4
     }
}

您的集合名称似乎有一个基于过滤器字段的模式,如果是这种情况,这种方法可能会起作用

Object marketFilter = filter.getAllMarket();
Object cmtsFilter = filter.getAllCmts();
Object packageFilter = filter.getAllPackage();
Object nodeFilter = filter.getAllNodes();


if(marketFilter != null){
    query.addFilterField("_id.market", MongoQuEry.OP_IN, filter.getMarket());
}
.
.
. upto filter N

String collectionName = getCollectionName(marketFilter, ... filter N)

/* 
 create a function getCollectionName(filter1, ... filterN)   
  in this function you can generate collection name by checking which 
  filters are not null.
*/

注意:-此方法仅在集合名称基于筛选器时有效。

您的集合名称似乎具有基于筛选器字段的模式,如果是这种情况,此方法可能有效

Object marketFilter = filter.getAllMarket();
Object cmtsFilter = filter.getAllCmts();
Object packageFilter = filter.getAllPackage();
Object nodeFilter = filter.getAllNodes();


if(marketFilter != null){
    query.addFilterField("_id.market", MongoQuEry.OP_IN, filter.getMarket());
}
.
.
. upto filter N

String collectionName = getCollectionName(marketFilter, ... filter N)

/* 
 create a function getCollectionName(filter1, ... filterN)   
  in this function you can generate collection name by checking which 
  filters are not null.
*/

注意:-只有当您的收藏名称基于过滤器时,此方法才有效。

谢谢,让我试试,然后让您知道。谢谢,让我试试,然后让您知道。