Gibt es eine elegante Möglichkeit, den Rückgabewert der Methode apply()
zu speichern, sodass sie nicht mehr als einmal aufgerufen werden muss? Weil ich nur daran denken kann, eine lokale Map-Variable zu erstellen, die die Funktion "Rückgabewert" -Paare speichert.Java-8-Funktion beim Iterieren einer Funktionsliste nur einmal aufrufen
@Autowired
private List<Function<String, String>> evaluators;
//...
private String evaluate(String code) {
return evaluators.stream().filter(f -> f.apply(code) != null).findFirst().get().apply(code);
}
Aber wenn Sie die Methode mit anderen 'Code' aufrufen, würden Sie anderes Ergebnis erwarten, nicht wahr? Sie möchten also, dass ein Cache des Codes zur Anwendung der Funktion führt? – Tunaki
Ja, ich hatte auf einen Caching-Mechanismus gehofft, der bereits in Java 8 eingebaut ist. –
Nichts eingebaut. Das Konzept nennt sich "Memoization", also versuchen Sie es zu googeln. Der allgemeine Ansatz wäre eine Methode, die Ihre Lambda-Instanz mit einer Memo-Ebene umschließt. –