有没有更好的方法来写这个逻辑.要求是按照特定的顺序应用一系列条件.这是对条件逻辑的颠覆,假设它就像一个漏斗.如果前一条规则或条件没有产生任何结果,则它必须执行下一条规则或条件.我试过Switch,但这似乎也不是一个合适的解决方案.

private List<String> filteredData(){

List<String> filteredList = new ArrayList();

filteredList.addAll(method1())
if(CollectionUtils.isEmpty(filteredList){
filteredList.addAll(method2())
}
if(CollectionUtils.isEmpty(filteredList){
filteredList.addAll(method3())
}
if(CollectionUtils.isEmpty(filteredList){
filteredList.addAll(method4())
}
if(CollectionUtils.isEmpty(filteredList){
filteredList.addAll(method5())
}
if(CollectionUtils.isEmpty(filteredList){
filteredList.addAll(method6())
}
if(CollectionUtils.isEmpty(filteredList){
filteredList.addAll(method7())
}
return filteredList;
}

推荐答案

只有method1()有关系,一旦Listnot为空,你就不需要再次判断它--如果method1()没有给List增加任何东西,其他方法似乎都不会运行.所以,

List<String> filteredList = new ArrayList<>(method1());
if (!filteredList.isEmpty()) {
    filteredList.addAll(method2());
    filteredList.addAll(method3());
    filteredList.addAll(method4());
    filteredList.addAll(method5());
    filteredList.addAll(method6());
    filteredList.addAll(method7());
}
return filteredList;

但是,根据你的prose分,你实际上想要的东西是

List<String> filteredList = new ArrayList<>();
if (!filteredList.addAll(method1())) {
    if (!filteredList.addAll(method2())) {
        if (!filteredList.addAll(method3())) {
            if (!filteredList.addAll(method4())) {
                if (!filteredList.addAll(method5())) {
                    if (!filteredList.addAll(method6())) {
                        filteredList.addAll(method7());
                    }
                }
            }
        }
    }
}
return filteredList;

假设您使用的是Java 8+,另一种 Select 是迭代Supplier个方法引用中的List个.喜欢,

List<Supplier<Collection<String>>> func = List.of(
        this::method1, this::method2, this::method3,
        this::method4, this::method5, this::method6,
        this::method7);
List<String> filteredList = new ArrayList<>();
for (Supplier<Collection<String>> f : func) {
    if (filteredList.addAll(f.get())) {
        break;
    }
}
return filteredList;

Java相关问答推荐

在Java中将Charsequence数组更改为String数组或List String<>

Java 8中的多个字段和计数

使用Mockito进行的Junit测试失败

将响应转换为带值的键

@Rollback @ Transmission在验收测试中不工作

基于接口的投影、原生查询和枚举

%This内置函数示例

允许同时执行两个方法,但不能同时执行这两个方法

如何创建模块信息类文件并将其添加到JAR中?

如何使用Criteria Builder处理一对多关系中的空值?

将stringBuilder + forloop转换为stream + map

用于Java的Visual Studio代码完成不起作用

Java KeyListener不工作或被添加

JavaFX,GridPane:在GridPane的列中生成元素将保持所有列的宽度

在Spring Boot中使用咖啡因进行缓存

Java System.getProperty在哪里检索user.home?

Cucumber java-maven-示例表-未定义一步

将基于实例编号的对象列表拆分为新的对象列表

当我将JTextField的getText函数与相等的String进行比较时;t返回true

ControlsFX RangeSlider在方向垂直时滞后