Ich habe eine Liste von MyObjects die ich in drei Gruppen zu unterteilen müssen:OO Muster eine Sammlung in Gruppen zum Teil
- gut bekannt (halten)
- schlecht bekannt (ablehnen)
- unerkannte (erhöhen alert)
MyObject enthält verschiedene Eigenschaften, die das Objekt in setzen, die der 3 Gruppen zu prüfen ist, um festzustellen.
Meine erste Implementierung (Java) nimmt nur eine Liste in ihrem Konstruktor und führt die Triage dort durch. Pseudo-Code:
class MyObjectFilterer {
public MyObjectFilterer(List<MyObject> list) {
// triage items here
}
public List<MyObject> getGood() {
// return sub-list of good items
}
public List<MyObject> getBad() {
// return sub-list of bad items
}
public List<MyObject> getUnrecognized() {
// return sub-list of unrecognized items
}
}
Probleme mit dieser Implementierung? Gibt es eine bessere OO-Wahl?
Ich weiß, dass Sie die übermäßige Verwendung oder falsche Verwendung von Guava-Funktionsparadigmen nicht im Griff haben, aber als Teil des Guava-Teams schlagen Sie nicht die Verwendung von 'Predicate's und' Iterables.filter() vor '? –
Absolut nicht. Zunächst möchte das OP die Liste in drei verschiedene Kategorien aufteilen. Selbst mit 'Iterables.filter' würde das OP 'Prädikat 's, nicht' Funktion 'verwenden und daran denken, dass es keine' Lists.filter'-Methode gibt - das würde drei Durchläufe der Zielliste erfordern eher als ein einzelner. Nicht nur, dass funktionale Idiome dies weniger lesbar machen, es würde es auch strikt weniger effizient machen. –
Ich war gerade dabei, meinen Beitrag zu bearbeiten, um Prädikate zu verwenden, bevor ich Ihre Antwort sah. Ich sehe Ihren Standpunkt, wie es für die Frage gilt, wie direkt gefragt. Ich denke, ich dachte nach, was hinter der Frage möglich war. Ist das Ziel tatsächlich, drei physische Sammlungen zu haben, oder war das Ziel, ein Mittel zu haben, um jedes Element einer einzelnen Sammlung nach Bedarf zu klassifizieren? Wenn Letzteres der Fall wäre, wäre es dann immer noch unangemessen, die Verwendung von Prädikaten als verteilte Klassifikatoren vorzuschlagen, wenn Sie den zu klassifizierenden Objekten keine Logik hinzufügen wollen? –