Zum Bereinigen einer Datenliste habe ich eine Methode erstellt, die die Liste der Daten und die Liste der durchzuführenden Reinigungsvorgänge akzeptiert.
public <T> List<T> cleanData(List<T> data, List<Function<T, T>> cleanOps) {
List<T>dataNew=data.stream().map((str) -> {
T cleanData = str;
for(Function<T,T> function:cleanOps) {
cleanData=function.apply(cleanData);
}
return cleanData;
}).collect(Collectors.toList());
return dataNew;
}
Das Problem hierbei ist, dass wir die gesamte Liste erneut erstellen, da Collectors.toList()
eine neue Liste zurückgegeben wird. Können wir das gleiche Ergebnis erzielen, ohne den zusätzlichen Platz zu nutzen?
Unten ist der Code für den Aufruf:
public void processData() {
List<Function<String, String>> cleanOps = new ArrayList<>();
cleanOps.add(String::toLowerCase);
cleanOps.add(str -> str.replaceAll(" ", ""));
List<String> data = new ArrayList<>();
data.add("John Doe");
data.add("Jane Doe");
System.out.println(Arrays.toString(cleanData(data, cleanOps).toArray()));
}
toList()
gibt einCollector
nicht einList
und nein zurück: Sie können keine "zusätzlichen Daten" ohne "zusätzlichen Speicherplatz" haben