干净的代码-压缩Java代码的最佳方法
我有如下代码:干净的代码-压缩Java代码的最佳方法,java,code-cleanup,Java,Code Cleanup,我有如下代码: for(int i=0; i < a; i++){ List<Integer> list = elementA.get(i); SomeClass rg = new SomeClass(list, a, methodA(i)); int result = rg.generate(); var+=methodA2(i, result); } for(int i=0; i <
for(int i=0; i < a; i++){
List<Integer> list = elementA.get(i);
SomeClass rg = new SomeClass(list, a, methodA(i));
int result = rg.generate();
var+=methodA2(i, result);
}
for(int i=0; i < b; i++){
List<Integer> list = elementB.get(i);
SomeClass rg = new SomeClass(list, b, methodB(i));
int result = rg.generate();
var+=methodB2(i, result);
}
for(int i=0;i
如何避免这种代码重复?我可以创建这样做的函数,但是如何使用不同的方法呢 使用Java<8,您可以创建一个接口(注意Java 8中已经有一个
IntFunction
接口):
- 定义一个方法,该方法将
作为返回所需数据的参数接收列表
- 定义一个包含通用方法的接口,如
,method
(基于您的代码)method2
public long yourFooMethod(List<List<Integer>> listOfData, int n, SomeInterface foo) {
int i = 0;
long var = 0;
for(List<Integer> list : listOfData) {
SomeClass rg = new SomeClass(list, n, foo.method(i));
int result = rg.generate();
var += foo.method2(i, result);
}
return var;
}
public long yourfoo方法(列表数据、int n、SomeInterface foo){
int i=0;
长var=0;
对于(列表:listOfData){
SomeClass rg=新的SomeClass(list,n,foo.method(i));
int result=rg.generate();
var+=foo.method2(i,结果);
}
收益var;
}
它取决于elementA和elementB、methodA()和methodB()以及methodA2()和methodB2()的声明。如果类的get()方法是由公共接口或超类定义的,这会有所帮助。至于方法,我们只需要对它们有更多的了解——它们是否以某种方式与get()对应@ᴋᴇʏsᴇʀ我添加了一个更详细的示例。可能值得指出的是,IntFunction
接口。@Boristeider是的,我确实是故意选择了这个名称!我知道,我想你是这样做的——也许值得明确地说出来。
private void m(Collection<List<Integer>> element, int a, IntFunction<A> f) {
for(int i=0; i < a; i++){
List<Integer> list = element.get(i);
SomeClass rg = new SomeClass(list, a, f.apply(i));
int result = rg.generate();
}
}
m(elementA, a, i -> methodA(i));
//or
m(elementA, a, this::methodA);
public long yourFooMethod(List<List<Integer>> listOfData, int n, SomeInterface foo) {
int i = 0;
long var = 0;
for(List<Integer> list : listOfData) {
SomeClass rg = new SomeClass(list, n, foo.method(i));
int result = rg.generate();
var += foo.method2(i, result);
}
return var;
}