2017-12-05 4 views
-1

I einen Schlüsselwert-ArraysLesbare Schlüsselwertpaar-Datenstruktur in Java

String[] fields  = {"firstName", "middleName", "id"}; 
String[] fieldValues = {"first name", "middle name", "student id"}; 

I eine Methode, die zwei Bohnen vergleicht und gibt eine Reihe von String mit unterschiedlichen Feldwerten.

public static String[] beanCompare(Object A, Object B, 
              String[] fields, String fieldValue); 

Beispiel Wenn ich eine Studentbean mit anderem Vorname und ID übergebe. Es wird

["first name", "student id"] zurückgegeben.

Ich muss 100er Bohnen vergleichen.
Der Rückgabewert aktualisiert eine Aktivitätsprotokolltabelle. Nehmen wir an, das firstName-Feld wird aktualisiert. Wir zeigen

die first name

aktualisiert wurde

in der Benutzeroberfläche. Es ist für das Auditing. Gibt es eine lesbare und wartbare Möglichkeit, ein solches Schlüssel/Wert-Paar darzustellen?

+0

betrachtet java 8 lambda streaming? Du brauchst immer einen 'Mapper' zwischen den 2 Listen –

+1

Aheum ... wo benutzt du die fieldValues? –

+2

'fieldValues' wird in Ihrer Methode nicht verwendet. Wofür ist das? –

Antwort

0

Also, Enum arbeitete für mich.

public enum FieldEnum { 

    firstName("first name"), middleName("middle name"), id("student id"); 

    String value; 

    FieldEnum(String value) { 
     this.value = value; 
    } 

    public String getValue() { 
     return value; 
    } 
    } 

Es ist besser lesbar und wartbar.

3

Korrigieren Sie mich, wenn ich falsch liege, aber es scheint, dass (Sie Feldnamen und Feldwerte auf diese Weise übergeben) Sie versuchen, benutzerdefinierte Objekte dynamisch zu erstellen.

Wenn das Ihr Zweck ist, dann sind Sie vollständig XY problem, da Sie diese Lösung für Ihr Problem herausgefunden haben, und dann versuchen Sie, diese Lösung zu tunen, während Sie auf das Problem zurückgehen sollten, Die hat eine Standard, Engineering, Best-Practice-Lösung: die Builder Pattern.

Wenn Sie viele Felder auf einem Objekt haben, aber in einigen Fällen nur einen Teil davon und in anderen Fällen einen anderen Teil verwenden müssen, verwenden Sie einen Builder, legen Sie nur die benötigten Felder fest und rufen Sie dann den Befehl auf build() Methode, und erhalten Sie Ihr Objekt, ohne zu tun, was Sie tun oder alle Konstruktoren zu permutieren.

Here is an example dieses Musters in Java.

+0

Ja, ich versuche, benutzerdefinierte Objekte dynamisch zu erstellen. Ich habe eine sehr vielfältige Reihe von Feldern. Ich kann keinen Builder für alle verschiedenen Methoden erstellen. Also dachte ich über ein Array von Strings nach, um mein Objekt dynamisch zu erstellen. Vielen Dank für den XY Problem Link. Ich habe eine Builder-Klasse erstellt, um die Liste der Feldzeichenfolge abzurufen, aber kann ich das Builder-Muster verwenden, um das dynamische Verhalten anzupassen? –

+0

Genau dafür ist das Builder-Muster gedacht.Wenn Sie 100 Felder haben, müssen Sie nur 100 Setter-Methode für den Builder erstellen, anstatt die Permutationen, die für alle verschiedenen Konstruktoren erforderlich sind (mathematisch wären 100 * 99/2 = 4950-Konstruktoren, um alle Fälle abzudecken). Versuchen Sie auch, solche riesigen Bohnen zu vermeiden, indem Sie Daten in mehr atomare Bohnen aufteilen, aber wenn Sie nicht können, ist Erbauermuster Ihr bester Freund hier –

+0

Hi. Ich entschuldige mich dafür, dass ich meine Situation nicht so klar erklären konnte, wie ich es beabsichtigt hatte. Ich verwende bereits das Builder-Muster. Ich habe 100 von Bohnen. Ich muss zwei Objekte der gleichen Bohne vergleichen. Und so habe ich das Feld und Werte Array. Ich suchte nach einer Möglichkeit, es besser darzustellen. Ich glaubte, ich wäre in die XY-Grube gefallen. –