Entfernen von Code-Duplikaten
Ich versuche eine kleine funktionale Programmierbibliothek für Java zu erstellen (nur um meinen eigenen Kratzer zu kratzen). Bei der Definition des Funktionen höherer Ordnung zumList
s,Set
s undMap
s Ich bin auf dieses Problem gestoßen: Die Funktionen, die eine Sammlung annehmen und eine Sammlung desselben Typs zurückgeben, haben fast die gleiche Implementierung und müssen dennoch für jede Datenstruktur neu definiert werden -List
s,Set
s undMap
s.
Hier ist zum Beispiel die Implementierung vonmap
Funktion fürList
s undSet
s:
public static <A, B> List<B> map(
List<? extends A> xs,
Func1<? super A, ? extends B> transformer
) {
List<B> ys = new ArrayList<B>();
for(A a : xs) {
ys.add(transformer.apply(a));
}
return ys;
}
public static <A, B> Set<B> map(
Set<? extends A> xs,
Func1<? super A, ? extends B> transformer
) {
Set<B> ys = new HashSet<B>();
for(A a : xs) {
ys.add(transformer.apply(a));
}
return ys;
}
A filter
Funktion:
public static <A> List<A> filter(
List<? extends A> xs,
Func1<? super A, Boolean> predicate
) {
List<A> ys = new ArrayList<A>();
for(A a : xs) {
if(predicate.apply(a)) {
ys.add(a);
}
}
return ys;
}
public static <A> Set<A> filter(
Set<? extends A> xs,
Func1<? super A, Boolean> predicate
) {
Set<A> ys = new HashSet<A>();
for(A a : xs) {
if(predicate.apply(a)) {
ys.add(a);
}
}
return ys;
}
ie aus diesem Beispiel hervorgeht, sind die Stellen der Implementierungen fürSet
undList
sind fast gleich.
Es gibt viele Funktionen wiemap
undfilter
in meiner Bibliothek, und jede davon ist dreimal für jeden Sammlungstyp definiert, an dem ich interessiert bin (d. h.List
, Set
, undMap
). Dies führt zu viel Code-Duplikation und Code-Geruch. Ich wollte wissen, ob es in Java einen Weg gibt, der mir hilft, alle Codeduplizierungen zu vermeiden.
Jede Hilfe wird sehr geschätzt. Vielen Dank
BEARBEITEN
Func1
ist eine Schnittstelle definiert als:
interface Func1<A, B> {
public B apply(A a);
}