J'ai une méthode de mappeur qui accepte une fonction lambda de l'objet qui l'appelle.Java itérer à l'aide d'une méthode de mappage à l'aide de lambdas?
LambdaList<String> strings = new LambdaList<String>("May",
"the", "force", "be", "with", "you");
list = strings.map(x -> x.length());
assert list.equals(new LambdaList<Integer>(3, 3, 5, 2, 4, 3))
: "map() failed. Result is " + list + ".";
La méthode carte sera alors itérer que la liste et retourner une nouvelle liste une fois que le lambda a été appliquée.
/**
* Returns a list consisting of the results of applying the given function
* to the elements of this list.
* @param <R> The type of elements returned.
* @param mapper The function to apply to each element.
* @return The new list.
*/
public <R> LambdaList<R> map(Function<? super T, ? extends R> mapper) {
ArrayList<R> newList = new ArrayList<>();
for(T item: this){
newList.add(mapper.apply(item));
}
return new LambdaList<R>(newList);
}
La liste lambda est définie comme ci-dessous:
class LambdaList<T> {
private ArrayList<T> list;
public LambdaList() {
list = new ArrayList<T>();
}
@SafeVarargs
public LambdaList(T... varargs) {
list = new ArrayList<T>();
for (T e: varargs) {
list.add(e);
}
}
private LambdaList(ArrayList<T> list) {
this.list = list;
}
public LambdaList<T> add(T e) {
ArrayList<T> newList = new ArrayList<>();
newList.addAll(list);
newList.add(e);
return new LambdaList<T>(newList);
}
J'ai essayé d'utiliser T item: this
pour faire référence à l'objet lui-même, mais cela ne fonctionne pas. Comment ferais-je pour implémenter cette méthode?
Comment avez-vous défini 'LambdaList'? Quelles sont les interfaces et la superclasse? –
Quel est le raisonnement derrière la méthode 'add'? Pourquoi ne pas simplement 'list.add (e); retourne ceci; – Marvin
@Marvin On dirait que c'est censé être une collection immuable. –