Auf Values einer übergebenen Map zugreifen

TSH

Bekanntes Mitglied
Hallo,

seit Tagen denke ich verzweifelt über folgendes Problem nach und würde mich wirklich sehr, sehr über Tipps freuen. Ich habe ein UserModel, welches aus einer Key-Value-Map besteht und ich habe keine Ahnung, wie ich später auf diese Map zugreifen kann.

Java:
/**
 * Ein UserModel besteht aus einer Map von Aussagen.
 *
 * Example:
 * locationServiceId --> [New York]
 * weatherServiceId --> [cloudy,rainy]
 * purchaseHistoryId --> [DVD-X, DVD-Y, DVD-Z]
 */
public class UserModel {
     
    // Alle Aussagen über diesen Nutzer
    private Map<ProviderId,Set<Statement>> statements = new HashMap<ProviderId,Set<Statement>>();   
     
    // Gibt alle Statements einer bestimmten Kategorie zurück
    public Set<Statement> getStatements(ProviderId id){
        return statements.get(id);
    }
}
 
/**
 * Ein UserClassifier klassifiziert Nutzer nach bestimmten Vorgaben, zB nach Ort
 * oder nach Kauf-History.  
 *
 */
public interface UserClassifier {
    public void classify(UserModel userModel);
}
 
public class LocationClassifier implements UserClassifier {
     
        // Vielleicht helfen irgendwelche Binding-Objekte oder 
        // Patterns, die stmts an ProviderIds oder konkrete Provider
        // binden? 
        // Könnten im constructor Classifier(Binding ... bindings)?
        // übergeben werden.
 
    @Override
    public void classify(UserModel userModel) {
 
        // Wie komm ich jetzt an die Stmts ran?
        Set<Statement> locationStmts = userModel.getStatements(???);
        Set<Statement> weatherStmts = userModel.getStatements(???);
        ...
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Ich kann zwar nicht riechen welche Logik du da implementierst, von den Namen her rate ich mal benötigst du sowas:

Java:
Set<Statement> locationStmts = userModel.get(<ProviderID von LocationService>);
Und bitte das ist kein java code, von wo du diese Variable herbekommst musst du selber wissen.
 
Ihr habt das Problem richtig erkannt. Nur komm ich ja nicht an das ProviderId Objekt ran. Ich würde gerne per Konstruktor, init-Methode oder sonstwie die korrekten IDs bzw. Provider injizieren. Aber ich wüsste nicht, wie das geschehen sollte.
 
also der Standard-Zugriff in einer Map ist der über get(Key), in deinem Fall also key=ProviderID. Was du dann mit dem Set widerum anstellst, musst du selbst wissen 😀

EDIT: Meinst du injezieren oder indizieren?
Solltest du zweiteres meinen, erstelle doch einfach eine neue Liste, in der die ProverIDs mit einem Key abgespeichert werden.
 
Zuletzt bearbeitet:
Das Problem ist folgendes: Ich erstelle kein Programm, sondern eine Bibliothek.

Jemand wird also später ein UserModel bauen und irgendwelche ProviderIds verwenden. Dann wird er einen UserClassifier instanziieren oder einen eigenen implementieren. Die konkreten ProviderIds sind erst bei Instanziierung bekannt.
 
was dein Programm in seiner Gesamtheit bedeutet ist jederman absolut unklar,
da musst du nicht anfangen, zweizeilige Erklärungen zu geben,

an der Stelle von
Java:
Set<Statement> locationStmts = userModel.getStatements(???);
muss eine ProviderId bekannt sein, Ende aller Geschichten,
wann bei dir im Programm wo in welcher Schublade wie verstaubt welche Id versteckt ist, ist unbekannt

könnte im UserModel stehen, im LocationClassifier, im UserClassifier, in einer statischen Variable einer Klasse deren Name als String bekannt ist,
in einer DB, in der Registierung des Betriebssystems, im Internet abfragbar, vom User einzutippen,
du brauchst jetzt nicht nochmal schreiben 'nein, UserModel hat Aufgabe xy',
das interessiert vorerst wirklich absolut nicht 😉 weil es wie gesagt bisher überhaupt keinen ausreichenden Einblick in deine Anwendung bietet,
dazu kann man einfach nichts sagen

oder ein konkreter Versuch:
Java:
public interface UserClassifier {
    public void classify(UserModel userModel);
    public Long getId();
}
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben