使用接口将方法应用于ArrayList
我正在复习考试。 关于旧测试的问题是:使用接口,编写一个方法,将任意方法应用于ArrayList的每个元素。 arraylist和method都是该方法的参数。
一个可行的解决方案是:
public someMethod() { scanner GLaDOS = new (someArray); someArray.useDelimiter(","); for (i = 0; i < someArray.length; i++) { someOtherMethod(someArray[i]); } }
我会期待这样的事情:
// define the interface to represent an arbitrary function interface Function { void Func(T el); } // now the method to apply an arbitrary function to the list void applyFunctionToArrayList(ArrayList list, Function func){ // iterate over the list for(T item : list){ // invoke the "arbitrary" function func.Func(item); } }
这个问题很模糊,但这可能意味着返回一个新的ArrayList,所以这可能是另一个可接受的答案
// define the interface to represent an arbitrary function interface Function { T Func(T el); } // now the method to apply an arbitrary function to the list ArrayList applyFunctionToArrayList(ArrayList list, Function func){ ArrayList newList = new ArrayList (); // iterate over the list for(T item : list){ // invoke the "arbitrary" function newList.add(func.Func(item)); } }
在旁注中,您可以比如调用应用程序(例如,将列表中的每个数字加倍):
ArrayList list = Arrays.asList(1.0, 2.0, 3.0); ArrayList doubledList = applyFunctionToArrayList(list, new Function { Double Func(Double x){ return x * 2; } });