重用代码循环遍历多维数组 - java

假设我有一个多维数组作为类的成员和许多方法,它们遍历数组的每个元素然后对其进行操作。代码可能看起来像这样:

public class Baz {

    private Foo[][] fooArray = new Foo[100][100];

    public Baz() {
        for (int i = 0; i < fooArray.length; i++) {
            for (int j = 0; j < fooArray[i].length; j++) {
                // Initialize fooArray
            }
        }
    }

    public void method1() {
        for (int i = 0; i < fooArray.length; i++) {
            for (int j = 0; j < fooArray[i].length; j++) {
                // Do something with fooArray[i][j] 
            }
        }
    }

    public void method2() {
        for (int i = 0; i < fooArray.length; i++) {
            for (int j = 0; j < fooArray[i].length; j++) {
                // Do something else with fooArray[i][j] 
            }
        }
    }

    // and so on
}

现在,由于循环的代码始终相同,因此仅循环内的操作会发生变化,是否有任何方式可以将循环的代码重构为单独的方法?能够做到那真是太好了

doInLoop(functionToExecute());

如果可能的话,最能替代这种方法的方法是什么?

java大神给出的解决方案

您正在寻找的是Command模式:定义一个单方法接口,并针对每个用例将其实现为匿名类。您需要将此接口的实例传递给一个方法,该方法完成所有样板操作,并仅出于有趣的部分调用您的方法:

public void forAllMembers(Foo[][] fooArray, Command c) {
    for (int i = 0; i < fooArray.length; i++) {
        for (int j = 0; j < fooArray[i].length; j++) {
            c.execute(fooArray[i][j]);
        }
    }
}

或者,等待Java 8,它将引入Lambda,并将为您的问题提供一流的解决方案!

Java日期格式解析 - java

我正在尝试通过JSON响应更改日期格式,但我一直在获取java.text.ParseException。这是来自服务器2015-02-03T08:37:38.000Z的日期,我希望它显示为2015/02/03这是yyyy-MM-dd。而我做到了。DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd�…

快速解析来自http://bit.ly链接的方法 - java

给定来自流的一系列URL,其中可能有数百万个bit.ly,google或tinyurl缩短了链接,那么解析这些URL以获得最终URL的最可扩展的方法是什么?一个多线程爬虫在每个短链接上执行HEAD请求,同时缓存已经解决的请求?是否已经有提供此服务的服务?还要考虑到不会被url缩短服务阻止。假设规模是每天缩短2000万个网址。 java大神给出的解决方案 Go…

bulit-in gradle插件的版本号是多少? - java

在我的gradle构建文件中,我有以下插件块plugins { `java-library` jacoco checkstyle } 这些都没有指定版本,但是一切正常。假定一个项目正在使用gradle 6.0和gradle包装器,但是系统已安装gradle 5.0。问题:如果我运行gradle wrapper ./gradlew build,将会执行grad…

“公共静态最终长USER_ACCOUNT = 32L”是什么意思?后缀L在long变量中意味着什么? - java

我在这里找到了代码片段public static final long USER_ACCOUNT = 32L; 32L在这里是什么意思?这是否意味着仅具有数字值long的32变量还是意味着long将需要32位值?如果我不提供后面的L数字32结尾怎么办? java大神给出的解决方案 在Java中编写长文字时,需要使用“ L”后缀。 (您可以使用小写的“ l”,…

DataSourceTransactionManager和JndiObjectFactoryBean和JdbcTemplate的用途是什么? - java

以下的用途是什么:org.springframework.jdbc.core.JdbcTemplate org.springframework.jdbc.datasource.DataSourceTransactionManager org.springframework.jndi.JndiObjectFactoryBean <tx:annotatio…