Использование интерфейса для применения метода к ArrayList - PullRequest
1 голос
/ 08 марта 2011

Я готовлюсь к экзамену. Вопрос по старому тесту был следующим: Используя интерфейс, напишите метод, который применяет произвольный метод к каждому элементу ArrayList. И массив, и метод являются параметрами метода.

Будет ли возможным решением:

public <object> someMethod() {
    scanner GLaDOS = new (someArray);
    someArray.useDelimiter(",");
    for (i = 0; i < someArray.length; i++) {
        someOtherMethod(someArray[i]);
    }
}

1 Ответ

2 голосов
/ 08 марта 2011

Я бы ожидал что-то вроде этого:

// define the interface to represent an arbitrary function
interface Function<T> {
    void Func(T el);
}

// now the method to apply an arbitrary function to the list
<T> void applyFunctionToArrayList(ArrayList<T> list, Function<T> 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> {
    T Func(T el);
}

// now the method to apply an arbitrary function to the list
<T> ArrayList<T> applyFunctionToArrayList(ArrayList<T> list, Function<T> func){
    ArrayList<T> newList = new ArrayList<T>();

    // iterate over the list
    for(T item : list){
        // invoke the "arbitrary" function
        newList.add(func.Func(item));
    }
}

В дополнение к этому вы, скажем, вызываете приложение, например (например, удваиваете каждое число в списке):

ArrayList<Double> list = Arrays.asList(1.0, 2.0, 3.0);
ArrayList<Double> doubledList = applyFunctionToArrayList(list, 
  new Function<Double>{
    Double Func(Double x){
        return x * 2;
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...