【问题标题】:multiple method execution with same input processed处理相同输入的多个方法执行
【发布时间】:2020-09-16 12:29:08
【问题描述】:

热烈的问候。

我有一个场景,我有 10 种方法,即 process1、process2...、process10 根据输入,我需要按特定顺序执行 10 个方法中的几个。 1)1,3,5,7 2)2,4,6,8 3)1,5,9,10

无论我执行什么顺序,第一种方法的输出都应该用作第二种方法的输入,依此类推。

我在互联网上搜索了很多,但没有找到合适的。我开始做下面的代码。 截至目前,我正在使用 java 的 concat 方法来实现这一点。

public class Perform {

    static String op = "";
    
    public static void main(String[] args) {
                process(list);
    }
    
    public static void process(List<String> list)
    {

        for(String str: list)
        {
            if(str.startsWith("Samsung"))
            {
process1("test").concat(process2(op).concat(process3(op)).concat(process4(op)));

            }
        }
    }
    
    public static String process1(String str)
    {
        System.out.println("process1 start");
        System.out.println("str1:"+str);
        System.out.println("process1 end");
        return str+"1";
    }
    public static String process2(String str)
    {
        System.out.println("process2 start");
        System.out.println("str2:"+str);
        System.out.println("process2 end");
        return str+"2";
    }
    public static String process3(String str)
    {
        System.out.println("process3 start");
        System.out.println("str3:"+str);
        System.out.println("process3 end");
        return str+"3";
    }
    public static String process4(String str)
    {
        System.out.println("process4 start");
        System.out.println("str4:"+str);
        System.out.println("process4 end");
        return str+"4";
    }
}

输出:

进程1开始

str1:测试

进程1结束

进程2开始

str2:

操作:

进程2结束

进程3开始

str3:

进程3结束

进程4开始

str4:

进程4结束

操作:test1234

答案是预期的并处理所有 4 种方法,但问题是:它没有打印参数“str”的值。为什么?

如果我保留代码

op = process1("test");
op = process2(op);
op = process3(op);
op = process4(op);

代替

process1("test").concat(process2(op).concat(process3(op)).concat(process4(op)));

然后它正在打印 str 的值,这是一个参数。

请从下面的代码中回答问题,并为这种情况推荐一些好的代码。

【问题讨论】:

  • 您将op 作为参数传递给每个函数。 op 是一个空白字符串,所以显然它不会打印任何东西。
  • :) 感谢您的及时回答。 :(对于减少这很好,对于同样的问题,我们有更好的解决方案吗
  • 我尝试将每个方法的值分配给 op,但现在的问题是:它显示方法中的 sop 正确,但它在方法末尾显示 op 值作为 test1test12test123test1234。这令人困惑。

标签: java chaining


【解决方案1】:

我找到了解决方案。我开发了下面的代码来解决它。如果有人对此有更好的解决方案,请告诉我。

public class Perform {

    private static List<Integer> SamsungMethodExecution = Arrays.asList(1,2,3,4,5);
    private static List<Integer> NokiaMethodExecution = Arrays.asList(6,7,8);
    private static List<Integer> LgMethodExecution = Arrays.asList(9,10);
    
    
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        
        list.add("Lgmsg");
        list.add("Samsungmsg");
        list.add("Nokiamsg");
        list.add("Lgmsg");
        list.add("Samsungmsg");
        list.add("Nokiamsg");
        list.add("Lgmsg");
        list.add("Samsungmsg");
        list.add("Nokiamsg");
//      
        process(list);
    }
    
    public static void process(List<String> list)
    {
        for(String str: list)
        {
            if(str.startsWith("Samsung"))
            {
                System.out.println("SAMSUNG======================================");
                Process.process(SamsungMethodExecution, str.replace("Samsung", ""));
                System.out.println("SAMSUNG======================================");
                System.out.println();
            }else if(str.startsWith("Nokia"))
            {
                System.out.println("NOKIA========================================");
                Process.process(NokiaMethodExecution, str.replace("Nokia", ""));
                System.out.println("NOKIA========================================");
                System.out.println();
            }else
            {
                System.out.println("LG===========================================");
                Process.process(LgMethodExecution, str.replace("Lg", ""));
                System.out.println("LG===========================================");
                System.out.println();
            }
        }
    }

public class Process {
    
    public static String process(List<Integer> processList, String msg) {
        String output = "";
        for(int i: processList)
        {
            switch(i)
            {
                case 1:
                    output = Process.process1(msg); break;
                case 2:
                    output = Process.process2(msg); break;
                case 3:
                    output = Process.process3(msg); break;
                case 4:
                    output = Process.process4(msg); break;
                case 5:
                    output = Process.process5(msg); break;
                case 6:
                    output = Process.process6(msg); break;
                case 7:
                    output = Process.process7(msg); break;
                case 8:
                    output = Process.process8(msg); break;
                case 9:
                    output = Process.process9(msg); break;
                case 10:
                    output = Process.process10(msg); break;
                default :
                    System.out.println("Sorry, no specific match found");
            }
        }
        return output;
    }

    public static String process1(String msg)
    {
        System.out.println("process1: "+msg);
        return msg;
    }
    public static String process2(String msg)
    {
        System.out.println("process2: "+msg);
        return msg;
    }
    public static String process3(String msg)
    {
        System.out.println("process3: "+msg);
        return msg;
    }
    public static String process4(String msg)
    {
        System.out.println("process4: "+msg);
        return msg;
    }
    public static String process5(String msg)
    {
        System.out.println("process5: "+msg);
        return msg;
    }
    public static String process6(String msg)
    {
        System.out.println("process6: "+msg);
        return msg;
    }
    public static String process7(String msg)
    {
        System.out.println("process7: "+msg);
        return msg;
    }
    public static String process8(String msg)
    {
        System.out.println("process8: "+msg);
        return msg;
    }
    public static String process9(String msg)
    {
        System.out.println("process9: "+msg);
        return msg;
    }
    public static String process10(String msg)
    {
        System.out.println("process10: "+msg);
        return msg;
    }
}

两个类,一个是主类,另一个是具有实际逻辑的进程类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 2017-10-23
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多